我想用6替换5并打印数字
我想用6替换5并打印数字,但我不能理解我的代码中有什么错误。例如,当我给出200的时候,输出应该是相同的,也就是200,但是它给出199,当我给出205作为输入,而不是206作为输出时,它给出205本身。
#include<stdio.h>
#include<math.h>
int main()
{
int n,i=0,r,sum=0;
while(1){
printf("\nenter no\n");
scanf("%d",&n);
while(n>0)
{
r=n%10;
printf("r is= %d\n",r);
if(r==5)
{
r=6;
}
sum=sum+(r*pow(10,i));
n=n/10;
i++;
}
printf("new no is:\t %d",sum);
sum=0;i=0;
}
return 0;
}
发布于 2019-06-14 02:56:40
正如其他人所指出的,这是一个浮点算术问题,pow
输出的值比期望的值小一点(即。得到199.999999而不是200,所以它被四舍五入为199)。There is a similar post about this behaviour.
无论如何,如果你只是想让它工作,你可以替换下面这一行:
sum=sum+(r*pow(10,i));
通过以下方式:
sum=sum+(r*(int)(pow(10,i)+0.5));
而且它会被四舍五入得恰到好处。再说一次,这只是一个快速的解决方案,可以帮助你让程序正常工作,因为我假设你是一个C语言的乞讨者。
但我强烈建议你去读一读编程语言中的浮点算术行为,以及为什么在C/C++中对整数使用pow
是一种糟糕的做法。
https://stackoverflow.com/questions/56586691
复制相似问题