这个题为什么输入110 100时错误啊???
求大佬解惑
#include<stdio.h>
int main ()
{
int a,n;
double x;
scanf("%d %d",&a,&n);
if(a<n*1.1)
{
printf("OK");
}
else if(a>=n*1.1 && a<=n*1.5)
{
x=100.0*(a-n)/n;
printf("%.0lf%%,1",x);
}
else if(a>=n*1.5)
{
x=100.0*(a-n)/n;
printf("%.0lf%%,2",x);
}
return 0;
}
精度问题。我打印出 n*1.1,你看它十几是110.00000000000001421085。解决办法是类型转换会整数,避免精度问题。你看一下修改后得代码和输出结果。
#include<stdio.h>
#include <math.h>
int main ()
{
const double e = 1e-5;
int a,n;
double x;
scanf("%d %d",&a,&n);
x = 1.1 * n;
printf("a=%d n=%d x=%4.20f\n", a, n, x);
if(a < (int)(n * 1.1))
{
printf("OK");
}
else if(a >= (int)(n*1.1) && a <= (int)(n*1.5))
{
x=100.0*(a-n)/n;
printf("%.0lf%%,1",x);
}
else if(a >= (int)(n*1.5))
{
x=100.0*(a-n)/n;
printf("%.0lf%%,2",x);
}
return 0;
}
//Output
110 100
a=110 n=100 x=110.00000000000001421085
10%,1
你说的错误是指什么啊?
希望对您有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对您有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html