总时间限制: 1000ms 内存限制: 65536kB
描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900
98765432100
样例输出
1219326311126352690000
提示
30%的数据,输入的两个整数不超过8位。
Code
C++
#include <bits/stdc++.h>
using namespace std;
int main() {
array<int, 999> t, res;
int k = 0, l = 0;
string a, b;
cin >> a >> b;
res.fill(0);
for(int i = b.size()-1; i >= 0; --i, ++l) {
k = l;
t.fill(0);
for(int j = a.size()-1; j >= 0; --j) {
t[k++] = (b[i]-'0')*(a[j]-'0');
}
for(int j = 0; j < k; ++j) {
t[j+1] += t[j] / 10;
t[j] %= 10;
}
for(int i = 0; i < 999; i++) {
res[i] += t[i];
}
}
int end = 0;
for(int i = 0; i < 999; i++) {
if(res[i] != 0) end = i;
}
for(int i = 0; i <= end; i++) {
res[i+1] += res[i] / 10;
res[i] %= 10;
}
for(int i = end+1; i >= 0; --i) {
if(i == end+1 && res[i] != 0) printf("%d", res[i]);
else if(i != end+1) printf("%d", res[i]);
}
}