【高精度】高精度乘法

问题 J: 【高精度】高精度乘法

时间限制: 1 Sec   内存限制: 64 MB
提交: 286   解决: 94
[ 提交] [ 状态] [ 讨论版] [命题人: ]

题目描述

牢门上的第三道锁,需要使用高精度乘法来破译出相应密码,当然,必须使用“万进制算法”计算两个非负整数A、B的积,其中A和B的位数在10000位以内。

输入

共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在10000以内。

输出

输出一个数,即A和B的乘积。

样例输入

2
3

样例输出

6
#include <iostream>
#include <vector>
#include <string>
using namespace std;
string multi(string num1,string num2){
    string ans="";int len1=num1.size(),len2=num2.size(),add=0;
    vector<long long>tmp(len1+len2-1);
    for(int i=0;i<len1;++i){
        int p1=num1[i]-'0';
        for(int j=0;j<len2;++j){
            int p2=num2[j]-'0';
            tmp[i+j]+=p1*p2;
        }
    }
    for(int i=tmp.size()-1;i>=0;--i){
        int now=tmp[i]+add;
        tmp[i]=now%10;
        add=now/10;
    }
    while(add!=0){
        int now=add%10;
        add/=10;
        tmp.insert(tmp.begin(),now);
    }
    for(auto a:tmp)ans+=to_string(a);
    if(ans.size()>0&&ans[0]=='0')return "0";
    return ans;
}
int main(int argc, char *argv[]) {
    string num1,num2;
    while(cin>>num1>>num2)
    cout<<multi(num1,num2)<<endl;
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/Rhythm-/p/9348898.html