牛客真题(7)-大整数相乘

今天继续刷牛客,求两个大整数相乘。

分析:
输入两个大整数都是用字符串表示,因此,可以通过乘法的规律,将一个字符串的每一位与另一个字符串进行相乘,乘积进行相加(不是简单的相加),最后得到的结果放入容器中,最后输出。

问题:
1、容器的使用;
2、注意下标的设置。

附上C++代码:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    string s1,s2;
    cin>>s1>>s2;
    vector<int> num1(s1.length(),0);
    vector<int> num2(s2.length(),0);
    vector<int> ans(s1.length()+s2.length(),0);
    vector<int> ji(s1.length()+1,0);
 
    for(int i=s1.length()-1,j=0;i>=0;--i)
            num1[j++]=s1[i]-'0';
    for(int i=s2.length()-1,j=0;i>=0;--i)
            num2[j++]=s2[i]-'0';
    int cheng,jin,jin1,he,x,k;
    for(int i=0;i<num2.size();++i)
    {
        jin=0,cheng=0,jin1=0,he=0,x=0;
        for(int j=0;j<num1.size();++j)
        {
            cheng=num1[j]*num2[i]+jin;
            ji[x++]=cheng%10;
            jin=cheng/10;
        }
        ji[x]=jin;
        for(k=0;k<ji.size();++k)
        {
            he=ji[k]+ans[k+i]+jin1;
            ans[k+i]=he%10;
            jin1=he/10;
        }
    }
        while(ans[ans.size()-1]==0) ans.pop_back();
    for(int i=ans.size()-1;i>=0;--i)
        cout<<ans[i];
    return 0;
}

然而Python没有那么多设置,不会出现整型溢出的情况。因为Python中数据存放是动态的可变长的结构,可以用数组或字符串来表示大数。

附上Python代码:

s=input().split(' ')
print(str(int(s[0])*int(s[1])))

猜你喜欢

转载自blog.csdn.net/JerryZengZ/article/details/88825105
今日推荐