【例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 位相乘所得的数,一定是要累加到
result的第i+j 位上。这里i, j 都是从右往左,从0 开始数。
result的第i+j 位上。这里i, j 都是从右往左,从0 开始数。
(2)源程序。
#include <stdio.h>
#include <string.h>
#define MAX_LEN 201
void bigNumMul(char a[],char b[],char c[])
{
#include <string.h>
#define MAX_LEN 201
void bigNumMul(char a[],char b[],char c[])
{

本文深入解析高精度计算中的大整数乘法算法,包括传统位操作方法和现代高效的Karatsuba算法。通过实例介绍如何处理超过常规整型范围的大整数相乘,为理解大规模数值计算提供基础。
:大整数乘法&spm=1001.2101.3001.5002&articleId=106047814&d=1&t=3&u=c5e7b5e3dc7a44feadf42fcd8e0cb734)
977

被折叠的 条评论
为什么被折叠?



