题目链接:http://acm.ocrosoft.com/problem.php?id=1256
题目描述
高精度乘法 输入:两行,每行表示一个非负整数(不超过10000位) 输出:两数的乘积。
输入
输出
样例输入
99
101
样例输出
9999
高精度乘法即 将字符串转化为单个数字,按照乘法法则进行相乘然后相加,然后将后一位数字产生的进位加到前一位数字上,后一位数字只保留其个位数字。
#include<bits/stdc++.h>
using namespace std;
char str1[11111],str2[11111];
int a[11111],b[11111],c[111111];
int main(){
cin>>str1>>str2;
int len1=strlen(str1);
int len2=strlen(str2);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int i,j=1;
for(i=len1-1;i>=0;i--){
a[j++]=str1[i]-'0';
}
j=1;
for(i=len2-1;i>=0;i--){
b[j++]=str2[i]-'0';
}
for(i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
c[i+j-1]+=a[i]*b[j];
}
}
for(i=1;i<len1+len2;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[i]==0&&i>1){
i--;
}
for(;i>=1;i--){
cout<<c[i];
}
cout<<endl;
return 0;
}