- 算法说明
对于大整数乘法,是将一个数,在数位上直接分成两半,分开计算,按照公式,加法直接计算,遇到乘法时,递归调用自己。公式如下图:
- 源代码
#include <cstdio>
#include <cmath>
int multiplye(int a, int b, int n) { //大整数乘法
if(n == 1) return a * b;
int mid = n / 2;
int temp = (int)pow((double)10, (double)mid);
int a1 = a / temp, a0 = a % temp; //将数据按照数位分成两半
int b1 = b / temp, b0 = b % temp;
int c2 = multiplye(a1, b1, mid), c0 = multiplye(a0, b0, mid);
int c1 = multiplye(a1 + a0, b1 + b0, mid) - (c2 + c0);
return c2 * pow((double)10, (double)n) + c1 * temp + c0;
}
int main() {
int a = 1234, b = 5678, n = 4;
printf("%d", multiplye(a, b, n));
return 0;
}
2.3.3 运行结果