【题目描述】
求两个不超过200位的非负整数的积。
【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
12345678900
98765432100
【输出样例】
1219326311126352690000
#include<bits/stdc++.h>
using namespace std;
int main(){
string str1,str2;
int a[333]={0},b[333]={0},c[333]={0};
cin>>str1;
cin>>str2;
int lena=str1.length();
int lenb=str2.length();
for(int i=0;i<=lena-1;++i)
a[lena-i]=str1[i]-'0';
for(int i=0;i<=lenb-1;++i)
b[lenb-i]=str2[i]-'0';
//每一位两两相乘,结果存入第i+j-1这个位置,乘法本质上是加法运算,每次要加上上次的进位,
for(int i=1;i<=lena;++i){
int x=0;
for(int j=1;j<=lenb;++j){
c[i+j-1]=c[i+j-1]+a[j]*b[i]+x;
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lenb]=x; //最后一位有进位
}
int lenc=lena+lenb;
while((c[lenc]==0)&&(lenc>1))
lenc--;
for(int i=lenc;i>0;i--)
cout<<c[i];
cout<<endl;
return 0;
}
有话要说...