为什么答案错了,写的哪里出错了?
看了好久不知道哪里错了。输入153,结果跑出152,help!.麻烦大家
int main (void)
{
int m,sum;
printf("pls input two number:\n");
scanf("%d",&m);
sum=0;
while (m>0){
sum=sum+pow(m%10,3);
m=m/10;
}
printf("%d",sum);
return 0;
}
出现这个问题,和pow()函数有关,pow()函数是实数函数,存在数据截断误差,还是不用为好,修改如下,供参考:
#include <stdio.h>
#include <math.h>
int main(void)
{
int m, sum;
printf("pls input two number:\n");
scanf("%d", &m);
sum = 0;
while (m > 0) {
sum += (m % 10) * (m % 10) * (m % 10); // 修改
//sum = sum + pow(m % 10, 3);
m = m / 10;
}
printf("%d", sum);
return 0;
}
没有错误啊,我这里结果就是153
【以下回答由 GPT 生成】
这段代码有一个错误和一个改进的优化点。
错误: 错误在于 m = m / 10
这一行。这里使用 /
运算符是整数除法,会将结果截断为整数。所以当 m
为 153 时,m / 10
的结果是 15 而不是 15.3。因此代码计算错误。
解决方案: 我们应该将 m
的类型改为浮点数,以支持浮点数除法。
改进的优化点: 在计算每一位立方和时,可以使用循环的同时将 m 除以 10,以避免多余的迭代。
修正后的代码如下:
#include <stdio.h>
#include <math.h>
int main(void) {
float m;
int sum;
printf("请输入一个数字:\n");
scanf("%f", &m);
sum = 0;
while (m > 0) {
sum += pow((int)m % 10, 3);
m = m / 10;
}
printf("%d\n", sum);
return 0;
}
这样修改后,对于输入的数字 153,输出将会是 153,符合预期结果。
【相关推荐】