【高精度】高精度乘法


問題 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

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM