大数乘法

来源:互联网 发布:全民飞机巅峰飞跃算法 编辑:程序博客网 时间:2024/05/01 18:20

大数乘法

http://poj.grids.cn/practice/solution/1789958/

问题描述:
求两个不超过200位的非负整数的积。

输入:

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

输出:

一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

输入样例:

12345678900
98765432100

输出样例:

1219326311126352690000

代码:

#include <iostream>using namespace std;#define N 200#include<cstring>#include<string>int a[N],b[N],sum[2*N];void multi(string s1,string s2,int sum[]){memset(sum,0,sizeof(sum));int i,j,index;index=0;for(i=s1.size()-1;i>=0;i--)a[index++]=s1[i]-'0';index=0;for(i=s2.size()-1;i>=0;i--)b[index++]=s2[i]-'0';for(i=0;i<s1.size();i++){for(j=0;j<s2.size();j++)sum[i+j]+=a[i]*b[j];}for(i=0;i<2*N;i++){if(sum[i]>9){sum[i+1]+=sum[i]/10;sum[i]=sum[i]%10;}}bool flag=false;for(i=2*N-1;i>=0;i--){if(flag||sum[i]){ flag=true;cout<<sum[i];}}if(!flag)cout<<"0";cout<<endl;}int main(int argc, char *argv[]){string s1,s2;cin>>s1>>s2;multi(s1,s2,sum);return 0;}


 

 

 

原创粉丝点击