更多算法和资料,查看原文链接
高精度运算:A * B 高精度
分别在两行内输入两个2000位以内的十进制非负整数,求他们的乘积。
【输入描述】
输入一行。输入 A 和 B,用空格隔开。
【输出描述】
输出一行。输出运算结果。
【输入样例】
5432 6789
【输出样例】
36877848
【参考程序】
//爱码岛编程(一本通1307)
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
const int maxn = 2001;
int a[maxn], b[maxn], c[maxn];
int main() {
string A, B;
cin >> A >> B;
int lenA = A.length();
int lenB = B.length();
//转换数组
for (int i = lenA - 1, j = 1; i >= 0; i--, j++) {
a[j] = A[i] - '0';
}
for (int i = lenB - 1, j = 1; i >= 0; i--, j++) {
b[j] = B[i] - '0';
}
for (int i = 1; i <= lenA; i++)
for (int j = 1; j <= lenB; j++) {
c[i + j - 1] += a[i] * b[j];
c[i + j] += c[i + j - 1] / 10;
c[i + j - 1] %= 10;
}
int len = lenA + lenB;
while (c[len] == 0 && len > 1)
len--; // 去掉前导零
for (int i = max(1, len); i >= 1; i--)
cout << c[i];
return 0;
}