传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1174
【题目描述】
求两个不超过200位的非负整数的积。
【输入】
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
【输出】
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
12345678900 98765432100
【输出样例】
1219326311126352690000
和高精加一样的存储。用竖式算
1 #include<iostream> 2 #include<cstring> 3 #define N 410 4 using namespace std; 5 string a,b; 6 int as[N],bs[N],cs[N],len; 7 int main(){ 8 cin>>a>>b; 9 for(int i=0;i<a.size();i++)as[i]=a[a.size()-i-1]-'0'; 10 for(int i=0;i<b.size();i++)bs[i]=b[b.size()-i-1]-'0'; 11 len=a.size()+b.size(); 12 for(int i=0;i<a.size();i++) 13 for(int j=0;j<b.size();j++) 14 cs[i+j]+=as[i]*bs[j]; 15 for(int i=0;i<len;i++) 16 if(cs[i]>9){ 17 cs[i+1]+=cs[i]/10; 18 cs[i]%=10; 19 if(i==len-1)len++; 20 } 21 while(len&&cs[len]==0)len--; 22 for(int i=len;i>=0;i--)cout<<cs[i]; 23 cout<<endl; 24 }