题目
1307:【例1.3】高精度乘法
【题目描述】
输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。
【输入】
输入两个高精度正整数M和N。
【输出】
求这两个高精度数的积。
【输入样例】
36
3
【输出样例】
108
1174:大整数乘法
【题目描述】
求两个不超过200位的非负整数的积。
【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
12345678900
98765432100
【输出样例】
1219326311126352690000
代码
高精度乘法模板题
#include<iostream>
#include<string>
using namespace std;
const int N = 113;
int a[N], b[N], c[N * 2];
int main() {
// 读入两个数
string x, y;
cin >> x;
cin >> y;
int lena = x.size(), lenb = y.size();
for (int i = 0; i < lena; i++) a[lena - 1 - i] = x[i] - '0';
for (int i = 0; i < lenb; i++) b[lenb - 1 - i] = y[i] - '0';
// 乘法计算
int len = lena + lenb, carry = 0, i, j;
for (i = 0; i < lenb; i++)
for (j = 0; j < lena || carry != 0; j++) {
c[i + j] = a[j] * b[i] + carry;
carry = c[i + j] / 10;
c[i + j] %= 10;
}
// 去除前导0
while (c[len - 1] == 0 && len > 1) len--;
for (int i = len - 1; i >= 0; i--) cout << c[i];
cout << endl;
return 0;
}