输入两个正整数m和n(m≥1,n≤1000),输出m到n之间的所有水仙花数。

输入两个正整数m和n(m≥1,n≤1000),输出m到n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。例如,153的各位数字的立方和是13+53+33 =153。
#include<stdio.h>
#include<math.h>
int main(void)
{
int m,n,i,sum,a;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
sum=0;
for(i=m;i<=n;i++){
a=i;
do{
sum=sum+pow(a-10*(a/10),3);
a=a/10;
}while(a!=0);
if(i==sum){
printf("%d\n",i);
}
}
return 0;
}
我不知道错哪了,虽然我后来换了一种方法对了,可是还是奇怪这一种为什么没有输出……求解

#include<stdio.h>
#include<math.h>
int main(void)
{
int m,n,i,sum,a;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
//int sum ;
for(i=m;i<=n;i++){
a=i;
sum=0;//下一个数,sum要重新回零咯 ,找的我晕啊~
/*假设是153-153(没错)
do{

sum=sum+pow(a-10*(a/10),3);//获取个位上的数字
a=a/10;
}while(a!=0);
第一次:sum=sum+pow(a-10*(a/10),3);//获取个位上的数字 153-10*15 sum = 0+pow(3,3)
第二次:a = 15 sum=sum+pow(a-10*(a/10),3);//获取个位上的数字 15-10*1 sum = 9+pow(5,3)
第三次:a = 1 sum=sum+pow(a-10*(a/10),3);//获取个位上的数字 1-10*0 sum = 9+125+pow(1,1)
*/
do{
sum=sum+pow(a-10*(a/10),3);//获取个位上的数字
a=a/10;
}while(a!=0);
//printf("sum = %d\n",sum);//加个输出语句监听 发现 了错误!!
if(i==sum){
printf("%d\n",i);
}
}
return 0;
}
//同学,求采纳 ,呵呵 我可是认真 分析了很久
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-20
#include<stdio.h>
#include<math.h>
int main(void)
{
int m,n,i,sum,a;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
for(i=m;i<=n;i++){
sum=0;
a=i;
do{
sum=sum+pow(a-10*(a/10),3);
a=a/10;
}while(a!=0);
if(i==sum){
printf("%d\n",i);
}
}
return 0;
}
第2个回答  2018-04-03

输入自己写。

for(int i=m; i<=n; i++){
    int a,b,c;
    a=i/100;
    b=i/10%10;
    c=i%10;
    if(a*a*a+b*b*b+c*c*c==i){
        //一个结果
    }
}

第3个回答  2012-04-20
sum在循环中没有确保每次的循环时初值都为0,当m和n都是153是可以的,有个范围就会有影响了