1. 程式人生 > >【高精度】高精度乘法

【高精度】高精度乘法

con img sub alt 狀態 圖片 hide num mst

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


【高精度】高精度乘法