问题 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; }