1174:大整数乘法

传送门: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 }
原文地址:https://www.cnblogs.com/jzxnl/p/11031347.html