问题描述
输入一个N位正整数(N>=3),输出所有N位水仙花数。
输入格式
输入一个正整数N(3<=N<=7)
输出格式
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入案例
3
输出样例
153
370
370
407
水仙花数
水仙花数”是指一个N位正整数(N>=3),其各位数字的立方和确好等于该数本身,如;153=1^3 + 5^3 + 3^3 ,则153是一个“水仙花数”。
例如153、370、371及407就是三位数的水仙花数,其各个数之3次幂等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
解题思路
先找出所有的N位数,然后遍历N位数,找出其中所有数字分解后每个位数上的数的N次幂累加和等于这个数的数字,并依次输出这个数。
代码
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
//找出所有的n位数
int first = 1;
int i = 1;
while(i<n){
first *=10;
i++;
}
//printf("first=%d\n",first);//调试first是否正确
//遍历n位数
i = first;
while(i<first*10){
int t = i;
int sum = 0;
do{
int d = t%10;
t/=10;//分解n位数
int p = d;
int j = 1;
while(j<n){
p *= d;//求每个数的n次幂
j++;
}
sum += p;//每个数的n次幂累加求和
}while(t>0);
if(sum == i){
printf("%d\n",i);//当累加和等于分解前的数时输出这个数
}
i++;
}
return 0;
}
运行结果