问题描述
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)。输入文件中有很多行,每行包括2个正整数m和n(100<=m,n<=999999),要求从小到大输出m和n之间的所有水仙花数。没有的则输出空行。
样例
AC代码
#include<stdio.h>
#include<math.h>
int weishu(int n){
int x=0;
while(n){
n/=10;
x++;
}
return x;
}//判断数字位数
int judge(int n){
int sum=0,t=n,num=weishu(n);
while(t){
sum += (int)pow((t%10),num);
t/=10;
}
if(sum==n) return 1;
else return 0;
}//判断各位n次幂之和是否等于i 即水仙花数定义
int main(){
int n,m,flag=1;
while(scanf("%d %d",&n,&m)!=EOF){
flag=1;
for(int i=n;i<=m;i++){
if(judge(i)) {
if(flag) {printf("%d",i);flag=0;}
else printf(" %d",i);//格式要求
}
}
printf("\n");
}
return 0;
}