高精度乘法模板
参考
参考高精度加法模板
代码
/* P1303 A*B Problem
* 来源:洛谷
* 作者:RainbowBird
* 日期:2020年6月8日
* 算法:高精度乘法
*/
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int a[20005], b[20005], c[20005];
char stra[20005], strb[20005];
int main() {
scanf("%s %s", &stra, &strb);
int lena = strlen(stra);
int lenb = strlen(strb);
// 靠右对齐
for (int i = lena; i > 0; i--)
a[i] = stra[lena - i] - '0';
for (int j = lenb; j > 0; j--)
b[j] = strb[lenb - j] - '0';
// 核心部分
for (int i = 1; i <= lena; i++) {
for (int j = 1; j <= lenb; j++) {
c[i + j - 1] += a[i] * b[j];
}
}
// 进位
for (int i = 1; i < lena + lenb; i++) {
if (c[i] >= 10) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
int flag = 0;
for (int i = lena + lenb; i > 0; i--) {
if (!flag && c[i] != 0)
flag = 1;
if (flag)
printf("%d", c[i]); // 倒着输出
}
if (!flag)
printf("%d", 0);
return 0;
}