作业帮 > 综合 > 作业

C语言编程数位的调换#include<stdio.h>int main(void){\x05int n,m,

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/01 12:46:37
C语言编程数位的调换
#include<stdio.h>
int main(void)
{
\x05int n,m,i,count=0,a,s=0;
\x05scanf("%d",&n);
\x05m=n;
\x05while(n!=0)
\x05{n=n/10;count++;}                                     /*计算位数*/
\x05
\x05for(i=0;i<count;i++)
\x05{
\x05\x05a=m%10;
\x05\x05s=s+a*pow(10,(count-i));                      /*首尾调换*/
\x05\x05m=m/10;
\x05}
\x05printf("%d",s);
\x05return 0;
}

为什么会多出一位?
C语言编程数位的调换#include<stdio.h>int main(void){\x05int n,m,
s = s + a * pow(10, count - i - 1);
//                            ^^^  要再减去1才对
再问: 减一的话最后结果就变成54320了

12345五位数,第一次取余为5,5*10000=50000经调试后却等于500000,多了个零(不减一)49999(减一)
再答: 这个减1是10的指数减1啊,不是s减1啊
因为count最后求的多少位数,所以第一位数其实是乘以10^(count-1)
所以5乘以的是10^4 就是10000
再问: 对啊,你看
再答: 等于49999是因为精度问题啦
试一下s = s + a * (int)(pow(10, count - i - 1)+1e-4);
再问: 这个1e-4是什么意思啊
再答: 就是0.0001 这个是为了修正pow(10, 5)会等于49999.99999996之类的错误
加上这个0.0001以后就会比50000大,取int的时候就不会变成49999,而是变成50000