·水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于他本身。例如:153=13 +53 +33 ,本题要求编写程序,计算所以N位的水仙花数。

输入格式:

输入在一行中给出一个正整数N(3<=N<=7)

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3

输出样例:

153
370
371
407

#include <stdio.h>

int main()

{	
int n;
scanf("%d",&n);
int first=1;
int i=1;
while(i<n){
	first *= 10;
	i++;				
}
//为了得到一个三位数first
//printf("first=%d\n",first); //查看当前first的值
//遍历100-999

i = first;

while (i<first*10){

int t = i;			//分解i,防止i被破坏,用t
int sum = 0;

do{					//do循环可以处理0的问题,while处理不了
int d = t%10;	//d是t的个位	
					/*	do是先执行指定语句,最后判断循环条件。
				    while是先判断循环条件,然后执行指定语句。
					所以,在循环内语句相同时,如果循环判断条件
					为0,do会执行一遍语句,而while则不会执行。*/
t/=10; 
int p = 1;
int j = 0;
while(j<n){

	p*=d;
	j++;
}
sum += p;
}while(t>0);

if (sum == i){

	printf("%d\n",i);
}

i++;

}

return 0;
}

更多推荐

C语言程序设计入门——水仙花数