C语言实现浮点除法(高精度)

本文介绍了一种使用数组来实现高精度浮点数除法的方法,通过将除法结果存储在一维数组中,实现了对(0,1)区间内任意浮点数的精确表达。文中提供了一个C语言程序示例,该程序可以计算并输出形如a/b的分数的小数形式,最多输出小数点后200位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求:由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就
需要自己设计实现方法。
(0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将
相除的结果存放在一维数组中,数组的每个元素存放一位十进制数字。即商的第一位存放在
第一个元素中,第二位存放在第二个元素中,以此类推,就可以用数组来表达一个高精度的
除法结果了。
如 16/19 的结果 0.8421052631...就可以依次存放 8、4、2、1、0、5、2、6、3、1...在数
组中。
而除法的过程,则可以模仿人工列竖式做除法的方式,先将被除数乘以 10,得到一位商以
后,将余数乘以 10 作为下一轮计算的被除数:
160/19->8 余 8
80/19->4 余 4
... 当某次余数为 0 时,则表明除尽。
现在,请写一个程序,输入一个分数,计算出它的小数形式。无论是否可以除尽,输出最多
小数点后 200 位。
输入格式:
形如
a/b
的两个数,其中 10<=a<b<100。
输出格式:
形如
0.xxxxxxxxx
的小数,小数点后最多 200 位。输出结束的时候要带着回车换行。
输入样例:
16/19
输出样例:
0.842105263157894736842105263157894736842105263157894736842105263157894
73684210526315789473684210526315789473684210526315789473684210526315789

473684210526315789473684210526315789473684210526315789473684


代码如下:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    char c;
    int a,b,d,i=0,n[200];
    
    scanf("%d%c%d",&a,&c,&b);
    a=(a*10)/b;
    d=(a*10)%b;
    while (d&&i<=200) {
        n[i]=a;
        i++;
        d=(a*10)%b;
        if((a*10)/b==0)
            a=a*10;
        else
            a=(a*10)/b;
    }
    printf("0.");
    for (i=0; i<200; i++) {
         printf("%d",n[i]);
    }
    printf("\n");
    return 0;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值