【例1】两个大整数乘法。
输入两个不超过200位的非负大整数a和b,求a×b的值。
(1)编程思路。
用 unsigned num1[200]和num2[200]分别存放两个乘数,用result[400]来存放积。计算的中间结果也都存在result 中。result 长度取400 是因为两个200 位的数相乘,积最多会有400 位。num1[0], num2[0], result[0]都表示个位。
计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将
进位问题留待最后统一处理。
进位问题留待最后统一处理。
图1给出了753×68的计算过程。描述如下:
1)先依次计算753的各位数字与8的乘积,并加到result数组的相应单元中。result数组的全部元素的初始值均为0。
2)再依次计算753的各位数字与6的乘积,并加到result数组的相应单元中。
3)乘法过程完毕。从 result[0]开始向高位逐位处理进位问题。result[0]留下4,
把2 加到result[1]上,result[1]变为60 后,应留下0,把6 加到result[2]上……最终使
得result 里的每个元素都是1 位数,结果就算出来了。
得result 里的每个元素都是1 位数,结果就算出来了。
在乘法过程中,num1的第i 位和num2的第j 位相乘所得的数,一定是要累加到