已知一个浮点数A(0<A<5),求它由哪两个整数B/C相除的值最接近

已知一个浮点数A(0<A<5),求它由哪两个整数B/C相除的值最接近,有相同值时要求B最小

例如:

 
 
  1. A=0.2

  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函数:求浮点类型数据的绝对值

 说明:如有错误,请指出,谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值