描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900
98765432100
样例输出
1219326311126352690000
将大整数放在整型数组中,为了方便计算,预处理的时候将大整数倒置放于数组中. 即 123 在数组中放置为 321
c[i + j] += a[i] * b[j];
然后将每位c[i]如果超过10就往前进位就可以了
c[i] = c[i] + t
t = c[i] / 10
c[i] = c[i] % 10
#include<iostream>
using namespace std;
int a[210],b[210],c[410],a_idx = 0,b_idx = 0;
int main(){
string s1,s2;
cin>>s1>>s2;
for (int i = s1.size() - 1; i >= 0; --i)
a[a_idx++] = s1[i] - '0';
for (int j = s2.size() - 1; j >= 0; --j)
b[b_idx++] = s2[j] - '0';
for (int i = 0 ; i < s1.size(); ++i)
for (int j = 0; j < s2.size(); ++j){
c[i + j] += a[i] * b[j];
}
int t = 0;
for (int i = 0; i < s1.size() + s2.size(); ++i){
c[i] = c[i] + t;
t = c[i] / 10;
c[i] = c[i] % 10;
}
int idx = 0;
for (int i = s1.size() + s2.size() ; i >= 0 ; --i) // 去除前导0
if (c[i] != 0){
idx = i;
break;
}
string ans = "";
for (int i = idx ; i >= 0; --i){
ans += char(c[i] + '0');
}
cout<<ans<<endl;
return 0;
}