输入两个正整数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;
} 展开
求解!!我这段代码到底哪里错了!!
#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、既然题目有误,那么按题目的要求,1肯定是水仙花数了,事实上1并不是水仙花数。如果修改题目,那么当m=1时,需要有处理措施。
2、每次判断完成后,sum要及时归零,以便计算下一个数各位数字的立方和。
提示:算法错误是C语言最严重的错误,格式再正确然而算法错误,等于零。
解决方法:
1、添加语句if(m==1) m=2;
2、在printf语句后面添加sum=0;
算法错误:
1、既然题目有误,那么按题目的要求,1肯定是水仙花数了,事实上1并不是水仙花数。如果修改题目,那么当m=1时,需要有处理措施。
2、每次判断完成后,sum要及时归零,以便计算下一个数各位数字的立方和。
提示:算法错误是C语言最严重的错误,格式再正确然而算法错误,等于零。
解决方法:
1、添加语句if(m==1) m=2;
2、在printf语句后面添加sum=0;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询