心血来潮写了个可进行无限精度除法运算的算法。算法类似手动计算除法,相除得到商和余数,将商输出,余数扩大十倍,再用余数除以除数得到商,循环往复即可无限精度计算除法了。但由于我用的是int类型,事实上不能真正的“无限”精度,C语言最高精度没验证,C#中测试最多只能算到32767位小数。更改类型当然可算得更精确,本文只是抛砖引玉,就不继续深入探讨了,C语言代码如下:

#include "stdio.h"
void Chu(int a,int b,int n) // 无限精度除法,a除以b,n为小数位数
{
    int x,i;
    x=a/b;
    printf("%d.",x);
    a=(a%b)*10;
    for(i=1;i<=n;i++)
    {
        x=a/b;
        printf("%d",x);
        a=(a%b)*10;
    }
    printf("n");
}

void main()
{
    int a,b,n;
    while(1)
    {
        scanf("%d",&a);
        scanf("%d",&b);
        scanf("%d",&n);
        Chu(a,b,n);
    }
}

效果如图:

无限精度除法运算

我用C#做了GUI界面,并统计了运算时间,代码、程序存在下图中,下载图片,改后缀为rar即可解压。

无限精度除法运算

可见运算效率并不高,像数学软件Mathematica、Matlab等都是用矩阵进行运算的,计算速度很快,本程序的算法只能说实现了功能,根本不实用,就当做一次C语言练习吧。