大数相乘法

题目:输入两个数,输出两个数相乘的结果

输入样例:

12345678900
98765432100

输出样例:

1219326311126352690000

#include <iostream>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;

int n,m,k,ans;
int dp[51][51][51][51],g[1000];
bool vis[105];
char ss[105];
string s;
string BigMult(string a,string b){          //a 被乘数  b乘数 
    int al=a.length();                        //相乘时,被乘数从低位到高位逐步相乘乘数的低到高位 相乘的每一位都保存到数组 
    int bl=b.length();
    int cl=0;
    for(int i=al-1;i>=0;i--){                //被乘数的低到高位 
        for(int j=bl-1;j>=0;j--){            //乘数的低到高位 
            g[cl]+=(a[i]-'0')*(b[j]-'0');   //位累加 
            cl++;                            //每操作一次长度加一 
        }
        if(i!=0)                            //没有到最后一位的话,下一次累加位是从上一次长度cl+1-被乘数长度开始  
        cl-=(bl-1);
    }
    for(int i=0;i<cl;i++){                    //对相加结果的数组进行进位 
        if(g[i]>10){
            long t=g[i];
            g[i]=t%10;
            g[i+1]+=t/10;
            if(i==cl-1){                    //数的最高位发生了进位,则长度加一 
                cl++;
            }
        }
    }
    string str="";                            //将结果转为字符串并返回 
    for(int i=cl-1;i>=0;i--){
        str+=(g[i]+'0');
    }
    return str;
}
int main() {
    string a,b;
    cin>>a>>b;
    
    cout<<BigMult(a,b); 
}
原文地址:https://www.cnblogs.com/xusi/p/12724859.html