[LEETCODE 43] 字符串相乘
Description
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
Solution
刚才灵光乍现想到了一种用 std::map
辅助完成高精度的做法,非常优雅(主要是不需要考虑边界问题之类的,很省脑子)
class Solution {
public:
string multiply(string num1, string num2) {
if(num1=="0" || num2=="0") return "0";
map<int,int> res;
vector<int> vec1,vec2;
for(auto c:num1) vec1.push_back(c-'0');
for(auto c:num2) vec2.push_back(c-'0');
reverse(vec1.begin(),vec1.end());
reverse(vec2.begin(),vec2.end());
int n=vec1.size(),m=vec2.size();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
res[i+j]+=vec1[i]*vec2[j];
}
}
for(int i=0;i<n+m;i++) res[i+1]+=res[i]/10, res[i]%=10;
string str;
vector<int> vec;
for(int i=0;i<n+m+1;i++) vec.push_back(res[i]);
while(vec.back()==0) vec.pop_back();
for(int i=vec.size()-1;i>=0;i--) str+='0'+vec[i];
return str;
}
};