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;
}