最新消息:

信奥赛专题_高精度计算_大整数乘法

C 少儿编程 1569浏览 0评论

计算大整数乘法也类似加法,可以用竖式来计算。它同样也要考虑进位,同时对每一位进行乘法运算时,必须进行错位相加。

在程序中,用str1[200]和str2[200]分别存放两个乘数,用num[401]来存放积。计算的中间结果也都存在num中。num长度取401是因为两个200位的数相乘,积最多会有400 位。str1[0], str2[0], num[0]都表示个位。计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。现以 835×49 为例来说明程序的计算过程。

先算835×9。5×9 得到45 个1,3×9 得到27 个10,8×9 得到72 个100。由于不急于处理进位,所以835×9 算完后,结果如下:

信奥赛专题_高精度计算_大整数乘法

接下来算4×5。此处4×5 的结果代表20 个10,因此要 num[1]+=20,变为:

信奥赛专题_高精度计算_大整数乘法

再下来算4×3。此处4×3 的结果代表12 个100,因此要 num[2]+= 12,变为:

信奥赛专题_高精度计算_大整数乘法

最后算4×8。此处4×8 的结果代表 32 个1000,因此要 num[3]+= 32,变为:

信奥赛专题_高精度计算_大整数乘法

乘法过程完毕。接下来从num[0]开始向高位逐位处理进位问题。num[0]留下5,把4 加到num[1]上,num[1]变为51 后,应留下1,把5 加到num[2]……最终使得num 里的每个元素都是1 位数,结果就算出来了:

信奥赛专题_高精度计算_大整数乘法

规律:一个数的第i位和另一个数的第j 位相乘所得的数,一定是要累加到结果的第i+j位上。这里i,j 都是从右往左,从0开始数。

 

C++代码如下:

信奥赛专题_高精度计算_大整数乘法

信奥赛专题_高精度计算_大整数乘法

信奥赛专题_高精度计算_大整数乘法

 

转自公众号:
南昌青少年编程

您必须 登录 才能发表评论!