大数乘法

当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.

输入:
  62773417 12345678

输出:
  774980393241726

分析:数组存数实现

//大数乘法问题
/*输入:
  62773417 12345678

输出:
  774980393241726*/

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    string a,b;
    while(cin>>a>>b){
    int c[8]={0},d[8]={0},e[8]={0},f[16]={0};
    int tmp=0,tag=0;
    int len1=a.length();
    int len2=b.length();
    for(int i=0;i<len1;i++) c[i]=a[len1-1-i]-'0';
    for(int i=0;i<len1;i++) cout<<c[i];
    cout<<endl;
    for(int i=0;i<len2;i++) d[i]=b[len2-1-i]-'0';
    for(int i=0;i<len1;i++) cout<<d[i];
    cout<<endl;
    
    for(int i=0;i<len1;i++) {//被乘数  c 
        for(int j=0;j<len2;j++){//乘数  d
        e[j]=c[i]*d[j];
        f[i+j]+=e[j];
}
}
for(int i=15;i>=0;i--) cout<<f[i]<<" ";
cout<<endl;
for(int i=0;i<16;i++)
{
    f[i]+=tag;
    tag=f[i]/10;
    f[i]%=10;
}
for(int i=15;i>=0;i--) {
    if(f[i]!=0&&tmp==0) {
        tmp=1;
        cout<<f[i];
    }
    if(tmp)
cout<<f[i];
}

cout<<endl;
}
} 
View Code

 

posted @ 2019-02-18 12:40  Hello_World2020  阅读(194)  评论(0编辑  收藏  举报