【题目描述】
求两个不超过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; }
有话要说...