题意
给定两个正整数,计算它们的积。正整数长度的范围是1到100000。
分析
1.高精度乘法分为高精度乘以低精度和高精度乘以高精度。
算法1:高精度乘以低精度
1.从高精度数的低位开始,每一个数位上的数都乘以低精度数,
并把相乘结果存储在相对应的数位。
2.接下来做进位处理,从低位向高位进位。
算法2:高精度乘以高精度
1.随机选择一个高精度数A,使A的每个数位分别与另一个高精度数B的每个数位相乘,
相乘的结果存储到相对应的数位。
2.接下来做进位处理,从低位向高位进位。
如图1所示。
代码
高精度乘低精度
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
//a[]存储的是A的倒序,c[]存储的是A乘以B的运算结果
int a[N], c[N];
//cnt1为a[]的长度,cnt3为c[]的长度
int cnt1, cnt3;
//a[]为A,b为B,cnt等于cnt1
int mul(int a[], int b, int cnt) {
int t = 0;//t为进位的数值
//从a[]的最低位开始,每一位都乘以B
for (int i = 1; i <= cnt; i++) {
//a[]的当前数位乘以b,且加上从低位进位上来的数值
t = a[i] * b + t;
//把上面一行的运算结果对10求余,得到的运算结果的个位存到c[]的当前数位上
c[i] = t % 10