我想编写一个除数和被除数都在50位以上的除法程序,起初想通过数组实现,但不知实现细节,望高手赐教!

解决方案 »

  1.   

    再说的细一点。只是一种方案,其余原理相似。假设你使用十进制规约,最大有效数字 64 位。你可以用一个有 64 个元素的数组表示除数。将数字填充进去的时候,确定一下小数点的位置,也就是前多少个元素表示整数。同样,用另一个数组表示被除数。最好是数组的成员数等于其有效数字,且小于被除数有效数字和所要求的商有效数字之差。开始除法计算之前,逻辑上首先将两个数字的小数点对齐,再将除数扩大 10 的 N 次方倍,使两数首元素对齐。但实际的做法是用被除数的整数位数减去除数的整数位数,得到的就是 N。注意 N 可能是负数。然后就开始减。每从对齐的被除数中减掉一个除数,商就增加 10 的 N 次方倍。直至减到不够减(可以看出一次对位最多减 9 次),除数向右移位(移位的同时 N 减一),也就是用被除数的第2、3、4……元素组成的数减除数。减的方法方法同上。一直减到除数的最后一个有效数字与被除数的最后一个元素对齐,且已经不够减。此时,被除数中的就是余数。想想笔算的原理,很容易懂。只是省去笔算每位上的“试商法”。因为计算机做循环操作比尝试法还要快。