1 /* 2 * Main.c 3 * C11-循環-11. 水仙花數 4 * Created on: 2014年7月30日 5 * Author: Boomkeeper 6 ******部分通過******** 7 */ 8 9 #include <stdio.h> 10 #include <math.h> 11 12 int N;//同題目中的N 13 14 void isNarcissus(int i){ 15 unsigned int sum=0; 16 int tem=i; 17 //將i各位拆分並計算其N次冪之和 18 do{ 19 sum+=pow(i%10,N); 20 i=i/10; 21 }while(i!=0); 22 //如果該N位數各位的N次冪之和等於該數本身,則為水仙花數 23 if(sum==tem) 24 printf("%d\n",tem); 25 } 26 27 28 int main(void){ 29 30 scanf("%i",&N); 31 32 int i; 33 for(i=pow(10,N-1);i<pow(10,N);i++) 34 isNarcissus(i); 35 36 return 0; 37 }
又沒能完全通過...桑心了...
經檢查,輸入6或者7的時候,返回結果很慢,我會優化算法,回頭補上!
題目鏈接:
http://pat.zju.edu.cn/contests/basic-programming/%E5%BE%AA%E7%8E%AF-11
,
,
水仙花數是指一個n 位數( n≥3 ),它的每個位上的數字的n 次冪之和等於它本身。——這個是它的定義,沒有說為什麼
至於上述的程序,a=i/100 ,因為a為整數,因此取值范圍0-9,取出數字 i 百位上的數字
;int b=i%100/10 ,同理b為整數,i%100後為個位與十位上組成的數,其取值范圍0-99,再/10 取出數字 i 十位上的數字;
最後int c=i%10,取得個位上數字;
根據定義:if(a*a*a+b*b*b+c*c*c==i)判斷每個位上的數字的n 次冪之和等於它本身
#include <stdio.h>
int main(void)
{
int i,j,k;
for (i=1;i<=9;i++)
{
for (j=0;j<=9;j++)
{
for (k=0;k<=9;k++)
{
if (100*i + 10*j + k == i*i*i +j*j*j + k*k*k)
{
printf("%d%d%d\n",i,j,k);
}
}
}
}
return 0;
}