以前做ACM的时候,许多人都通过 BigInteger 来实现大数乘法,让我记忆犹新的事2012年的辽宁省赛在大连大学,第一道水题就是大整数乘法,那时还不会java。 大数乘法的实现是基于印度的格子乘法,使用这种方法,计算 m 位数乘以 n 位数只需要创建一个 m+n 位的数组保存结果即可。
今天我们来用python来模拟一下格子算法的运算过程,python来写算法还是很简单的。
下面是从维基百科上爬下来的图片和详细步骤。
第一步:画带斜线的格子,将第一数(58)写在格子顶部,第二数(213)书写着格子的右侧如图,格子斜线下方写下乘积德个位数,格子斜线之上写入乘积的十位数。
第二步:将每个格子顶上数字与同一格子右边的数字相乘,将乘积逐个写入格子内,然后自下而上按斜线将数字相加,将所得的和写在格子图之下或左边:
第三步:从格子左边自上而下,接格子下边自左至右,读出乘积:12354