我想用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;
}
答案 0 :(得分:4)
就像其他人指出的那样,这是一个浮点算术问题,输出的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
是一个不好的习惯。