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

输入两个正整数m和n(m≥1,n≤1000),输出m到n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。例如,153的各位数字... 输入两个正整数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;
}
展开
 我来答
新泥称
推荐于2016-01-27 · TA获得超过339个赞
知道答主
回答量:216
采纳率:75%
帮助的人:24.7万
展开全部
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);
 }
}
xuzhouliuying
高粉答主

推荐于2018-04-05 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:5.4万
采纳率:86%
帮助的人:2.5亿
展开全部
题目错误:水仙花数指的是三位数满足各位数字的立方和等于该数。你的题目描述有问题,请不要在原题基础上自主创作。
算法错误:
1、既然题目有误,那么按题目的要求,1肯定是水仙花数了,事实上1并不是水仙花数。如果修改题目,那么当m=1时,需要有处理措施。
2、每次判断完成后,sum要及时归零,以便计算下一个数各位数字的立方和。
提示:算法错误是C语言最严重的错误,格式再正确然而算法错误,等于零。
解决方法:
1、添加语句if(m==1) m=2;
2、在printf语句后面添加sum=0;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式