大整数相乘

Posted fzuhyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大整数相乘相关的知识,希望对你有一定的参考价值。

题目描述

有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。

输入描述:

空格分隔的两个字符串,代表输入的两个大整数

输出描述:

输入的乘积,用字符串表示

 

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    string a;
    a[0] = 2;
    a[1] = 4;
    a[2] = 5;
    cout<<a<<endl;       //输出为空
    cout<<a[1]<<endl;  //输出为4
}    
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    string a;
    a[0] = 2;
    a[1] = 4;
    a[2] = 5;
    cout<<a<<endl;    //输出为空
    
    string b;
    b += 2;
    b += 4;
    b += 5;
    cout<<b<<endl;    //输出为245
}
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string Reverse(string ans)
{
    for(int i=0,j=ans.length()-1;i<j;i++,j--)
    {
        char temp = ans[i];
        ans[i] = ans[j];
        ans[j] = temp;
    }
    return ans;
}
string Add(string s1,string s2)
{
    string temp;
    if(s1.length() < s2.length())    //确保s1长度大于等于s2
    {
        temp = s1;
        s1 = s2;
        s2 = temp;
    }
    
    int i=s1.length()-1,j=s2.length()-1;
    string ans;
    int t=0;
    while(i>=0 || j>=0)
    {
        if(i>=0 && j>=0)
        {
            int a = (s1[i]-0);
            int b = (s2[j]-0);
            if(a+b+t >= 10)
            {
                a = a+b+t-10;
                ans += (a + 0);
                t = 1;
            }
            else
            {
                a = a+b+t;
                ans += (a + 0);
                t = 0;
            }
            i--;
            j--;
        }
        else if(i>=0 && j<0)    //保证s1长度>=s2
        {
            int a = (s1[i]-0) + t;
            if(a >= 10)
            {
                a = a - 10;
                ans += (a + 0);
                t = 1;
            }
            else
            {
                ans += (a + 0);
                t = 0;
            }
            i--;
        }
    }
    if(t == 1)
    {
        ans += 1;
    }
    ans = Reverse(ans);
    return ans;
}
string Mul(string s1,string s2)
{
    string temp;
    if(s1.length() < s2.length())    //确保s1长度大于等于s2
    {
        temp = s1;
        s1 = s2;
        s2 = temp;
    }
    int t=0,h=0,num=0;
    string ans,tmp;
    for(int i = s2.length()-1;i>=0;i--)
    {
        for(int j = s1.length()-1;j>=0;j--)
        {
            int a = (s1[j]-0);
            int b = (s2[i]-0);
            int sum = a*b+t;
            a = sum % 10;
            t = sum / 10;
            tmp += (a+0);
        }
        if(t!=0)
        {
            tmp += (t+0);
            h++;
            t = 0;
        }
        tmp = Reverse(tmp);
        for(int i=0;i<num;i++)
        {
            tmp += 0;
        }
        num++;
        ans = Add(tmp,ans);
        tmp = "";
    }
    return ans;
}
int main()
{
    string s1,s2;
    cin>>s1>>s2;
    string ans;
    ans = Mul(s1,s2);
    cout<<ans;
    return 0;
}

 

以上是关于大整数相乘的主要内容,如果未能解决你的问题,请参考以下文章

大整数相乘

python写的大整数相乘的方法

[算法]:分治法-求大整数相乘

大整数相乘

数组乘法(大整数相乘)

牛客刷题-大整数相乘