C 将数字中的数字5替换为6
我想把5换成6,然后打印号码 我想用6代替5并打印数字,但我不明白我的代码有什么问题。例如,当我给200时,输出应该是相同的,即200,但它给199,当我给205作为输入而不是给206作为输出时,它给205本身C 将数字中的数字5替换为6,c,arrays,C,Arrays,我想把5换成6,然后打印号码 我想用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("
#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;
}
#包括
#包括
int main()
{
int n,i=0,r,和=0;
而(1){
printf(“\n输入编号\n”);
scanf(“%d”和“&n”);
而(n>0)
{
r=n%10;
printf(“r为=%d\n”,r);
如果(r==5)
{
r=6;
}
总和=总和+(r*pow(10,i));
n=n/10;
i++;
}
printf(“新编号为:\t%d”,总和);
总和=0;i=0;
}
返回0;
}
正如其他人所指出的,这是一个浮点算术问题,输出的值pow
略小于所需值(即获得199.999999而不是200,因此四舍五入为199)
无论如何,如果您只是想让它工作,您可以替换这一行:
sum=sum+(r*pow(10,i));
与:
sum=sum+(r*(int)(pow(10,i)+0.5));
它会变得恰到好处。
再一次,这只是一个快速的解决方案,将帮助您使程序工作,因为我假设您是C语言中的乞丐
但是我强烈建议您阅读编程语言中的浮点算术行为,以及为什么在C/C++中对整数使用
pow
是一种不好的做法。正如其他人所指出的,这是一个浮点算术问题,pow
输出的值略小于期望值(即得到199.999999而不是200,因此四舍五入为199)
无论如何,如果您只是想让它工作,您可以替换这一行:
sum=sum+(r*pow(10,i));
与:
sum=sum+(r*(int)(pow(10,i)+0.5));
它会变得恰到好处。
再一次,这只是一个快速的解决方案,将帮助您使程序工作,因为我假设您是C语言中的乞丐
但是我建议您阅读编程语言中的浮点算术行为,以及为什么在C/C++中对整数使用
pow
是一种不好的做法。我怀疑这是由于调用pow()时出现了浮点问题
-它返回一个double
,而不是整数类型。一个明显的问题是,您正在调用pow
。这是一个浮点函数,不会产生精确的结果。对于您的应用程序来说,这也是完全不必要的。请删除i
,并用从1
开始的乘法器替换它。通过循环每次将其乘以10
。使用调试器。逐行检查代码,并检查变量!(您的代码很短,因此很容易)我怀疑这是由于调用pow()时出现浮点问题所致
-它返回一个double
,而不是整数类型。一个明显的问题是,您正在调用pow
。这是一个浮点函数,不会产生精确的结果。对于您的应用程序来说,这也是完全不必要的。请删除i
,并用从1
开始的乘法器替换它。每次循环时,将其乘以10
。使用调试器。逐行检查代码,并检查变量!(您的代码很短,因此很容易)我不认为pow(10,I)
将返回任何接近199.9999的整数i
。@CiaPan True,我指的是pow的输出值,因此200可能是2*pow(10,2),而返回199.9999。我不认为pow(10,i)
将返回任何接近199.9999的整数i
。@CiaPan True,我指的是pow的输出值,因此200可能是2*pow(10,2),而不是返回199.9999。