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

输入两个正整数m和n(m≥1,n≤1000),输出m到n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。例如,153的各位数字的立方和是13+53+33 =153。

求解!!我这段代码到底哪里错了!!

#include<stdio.h>
int main(void){
int m,n,i,j,sum=0,a;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
for(i=m;i<=n;i++){
j=i;
while(j!=0){
a=j%10;
sum=sum+a*a*a;
j=j/10;}
if(sum==i)
printf("%d\n",i);
}

return 0;
}

inline int sqr(int a, int b)//a的 b次方.
{
 if(b == 0)return 1;
 int c = a;
 while(--b)c = c * a;
 return c;
}
int main()
{
 int min = 100, max = 1000000;//在这输入最小数和最大数.或换代码动态输入.
 int sum = 0, size,  n[100];//最大支持100位的水仙花数
 for(int i = min; i <= max; i++)
 {
  sum = i;
  size = 1;
  while(sum /= 10)size++;//sum 临时用来计算长度.
  sum = 0;
  for(int k = 0; k < size; k++)
  {
   n[k] = i / sqr(10, size - k - 1) % 10;//取出位数
   sum += sqr(n[k], size);//本来是放在另一个循环里的,为了减少代码放在一起了.
  }
  if(sum == i)
   printf("%d\n",i);
 }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-05
题目错误:水仙花数指的是三位数满足各位数字的立方和等于该数。你的题目描述有问题,请不要在原题基础上自主创作。
算法错误:
1、既然题目有误,那么按题目的要求,1肯定是水仙花数了,事实上1并不是水仙花数。如果修改题目,那么当m=1时,需要有处理措施。
2、每次判断完成后,sum要及时归零,以便计算下一个数各位数字的立方和。
提示:算法错误是C语言最严重的错误,格式再正确然而算法错误,等于零。
解决方法:
1、添加语句if(m==1) m=2;
2、在printf语句后面添加sum=0;本回答被网友采纳