A*B Problem(High)
这高精度是真__的难
题目描述
给出两个自然数,求它们的乘积。
输入格式
输入共两行,每行一个自然数。
输出格式
输出一个自然数表示乘积。
样例 #1
样例输入 #1
1
2
样例输出 #1
2
提示
每个自然数不超过 \(10^{2000}\)。
code:
#include <bits/stdc++.h>
using namespace std;
int a[2023],b[2023],c[4000001];
string x,y;
int main(){
cin>>x>>y;
int n = x.size(),m = y.size();
for(int i = 0;i<n;i++) a[i] = x[n-i-1] - '0';
for(int i = 0;i<m;i++) b[i] = y[m-i-1] - '0';
int t = n+m-1;
for(int i = 0;i<n;i++)
for(int j = 0;j<m;j++)
c[i+j] += a[i] * b[j];
for(int i = 0;i<t;i++){
c[i+1] += c[i]/10;//用+=是因为可能有进位
c[i] %= 10;//进位后的实际情况
}
while(c[t] != 0){
c[t+1]+=c[t]/10;
c[t]%=10;
t++;
}
while(c[t-1] == 0 and t > 1) t--;
for(int i = t-1;i >= 0;i--) cout<<c[i];
return 0;
}

浙公网安备 33010602011771号