首先说一下我们所要的结果,当除数除不开被子除数时,不用除到小数,当除数小于被除数时,除数作为余数既可,不用再向下除了。
除法算法是最容易想到的啦!我们学数字电路,或模拟电路时里面有用门实现的除法器,做法是用除数减被除数,再用一个加法器去计算存储结果,算法简单明了,结果我实现之后,计算速度大大出乎我的遇料,比算乘方时还慢,经仔细想想电路中计算的长度不过8位,16位,32位,而且都是硬件实现,我们要算的是几千位,几万位。特别是两数位长度差很大时计算速度相当慢,如10000-3时要进行多少次链表运算啊。
否定了这条算法,经不断思考,发现另一种方法可行,且效率仅次于减法。就是从高位向低位减,减时以被除数长度为单位,从高位取出大于被除数的字符串,和被除数相减,减的次数为结果,余数从剩下的除数高位再取出几位做补位,直到大于被除数。再减,循环减到被减数大于余数加上补位,那么这个新的余数作为结果返回。
在程序时应注意:
1、除法算法计算时是用的最高位开始向低位减,所以要注意指针的位置。
2、余数和被减数相减时,一定要注意:一旦能够减开被除数时,一定要每从除数那里取一个字符时,结果也要对应补一个0。如111222/111。
参考资料:
http://blog.youkuaiyun.com/sunmenggmail/article/details/7532522
http://blog.youkuaiyun.com/agoago_2009/article/details/6862290
http://www.cnblogs.com/lsx54321/archive/2012/07/24/2606334.html
http://www.cnblogs.com/c840136/articles/2168405.html
http://bbs.youkuaiyun.com/topics/330053887
http://hi.baidu.com/eshifangs/item/1c86fe24deb5d15747996262