已知一个浮点数A(0<A<5),求它由哪两个整数B/C相除的值最接近,有相同值时要求B最小
例如:
A=0.2
B=1 C=5
#include <stdio.h>
#include <math.h>
int main()
{
float A = 0.2f;
int x = 0;//相当于设置一个flag,用于后面的条件判断
if (A < 0)//不应该是A<1吗????但是效果还是一样的
{
x = 1;
A = 1 / A;//如果A是小于1的话,取倒数
}
float delta = 1;//先让△=1
int B = 1, C = 1;
do
{
C =(int)(B*A);//把B*A强制转换称int类型
delta = fabs(C / (float)B - A);//用C/B减去A再取绝对值可得现在的误差度,fabs是浮点类型去绝对值函数
B++;//如果精度不够,说明B不是最小的,+1
} while (delta > 0.000001);//10进制默认六位小数的精度,验证一下可以得到最后每次的delta=0
if (x == 0)//这是当A>1那种情况
printf("%d / %d", C, B - 1);//先输出C再输出B,不知道为啥反写迷惑人
else//A<1的情况
printf("%d / %d", B - 1, C);//B-1是因为最后先加1再继续循环的
return 0;
}
abs函数:求整型数据的绝对值
fabs函数:求浮点类型数据的绝对值
说明:如有错误,请指出,谢谢!