水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 13 + 53+ 33。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<=N<=7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:3输出样例:
153 370 371 407
<pre name="code" class="cpp">#include <stdio.h> int main() { int n; scanf("%d",&n); //n=3; int first=1; int i=1;//i是每一个数字,测试是否是水仙花数 //i仅仅是用来计数,和输入的n比较,找到first值 //3位数的first值是100,4位数的first值是10000,5位数的··· while(i<n)//n为输入一个N位数 { first*=10; i++; } printf("first=%d\n",first); //遍历三位数,100-999 i=first; while(i<first*10){ int t=i;//临时变量记录i,分解成每个位 int sum=0; do{ int d=t%10; t/=10; //如何计算n次幂 //d^2=d*d*d 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; }