题目描述:
计算高精度乘法。
输入格式:
第一行为测试样例组数n,之后n行是用空格分开的两个数A、B。
输出格式:
每行为一行答案。
样例输入:
2 1234565432 6543456543 2222222222 33333333333
样例输出:
8078325253782021576 74074074065925925926
提示:
对于20%的数据:
n <= 10
A, B < 10^4
对于50%的数据:
n <= 10
A, B < 10^10
对于100%的数据:
n <= 100
A, B < 10^1000
若你认为会超时,那么可以输出前若干个答案,spj会给你部分分。
时间限制: 2000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[2001],b[2001];
int n;
cin>>n;
for(int k=1;k<=n;k++){
cin>>a>>b;
int c[2001]={0},d[2001]={0},e[4000000]={0};
int s=strlen(a),s1=strlen(b);
for(int i=0,j=s-1;i<s;i++,j--){
c[j]=a[i]-'0';
}
for(int i=0,j=s1-1;i<s1;i++,j--){
d[j]=b[i]-'0';
}
for(int i=0;i<s;i++){
for(int j=0;j<s1;j++){
e[i+j]+=c[i]*d[j];
e[i+1+j]=e[i+1+j]+e[i+j]/10;
e[i+j]=e[i+j]%10;
}
}
for(int i=39999;i>=0;i--){
if(e[i]!=0){
for(int j=i;j>=0;j--){
cout<<e[j];
}break;
}
}
cout<<endl;
}
return 0;
}