#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
float inter;
int num[8];int m;
float n;
int i;
float j;
int ys;
scanf("%f",&inter);
m=(int)inter;
ys=m;
for (i=0;i<4;i++)
{
if (m>=(int)pow(10,3-i))
{
num[i]=(int)(m/pow(10,3-i));
m=m-(int)(num[i]*(int)(pow(10,3-i)));
printf("%d",num[i]);
}
}
n=inter-ys;
for (i=4;i<8;i++)
{
if (n!=0)
{
j=n*(int)(pow(10,1));
m=(int)j;
n=j-m;
printf("%d\n",m);
}
}
}
以下编程求输入12.36输出1,2,3,6怎么错了?
答案:2 悬赏:60 手机版
解决时间 2021-04-27 08:09
- 提问者网友:却不属于对方
- 2021-04-27 05:11
最佳答案
- 五星知识达人网友:一秋
- 2021-04-27 05:49
首先感谢你提出了这个问题,因为这个问题涉及到C语言的细节问题。平时我们根本不会
去注意。你的代码是本身是没有错误的,关键是没有考虑到C语言中float的精度问题,当你输入
12.36以后,n=inter-ys=0.36,但是在计算机内部却不是这样存储的,而是n=0.3599996567(这里
值表示了小数点后十位),当你下一步j=n*(int)pow(10,1)时,计算出来的数是3.599996567,所以循环第一次
输出地是3,后面输出是5 9 9.即使使用double类型也同样存在这个问题
我没有很好的解决方法,可以将j四舍五入,即m=(int)j;前面加上j+=0.0005,但输出的结果是1 2 3 6 0 0,
希望能有高手有更好的方法解决这个问题。
全部回答
- 1楼网友:平生事
- 2021-04-27 07:07
#include <stdlib.h>
void main()
{
char b[1001]={0};
int i = 0 ;
scanf("%s",b);
for( i = 0 ; i < strlen( b ) ; i++)
{
if( isdigit( b[i]))
printf( "%c," , b[i]);
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯