[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;
    }
};

相关文章:

  • 2021-07-10
  • 2021-09-06
  • 2021-12-17
  • 2021-06-15
  • 2021-07-01
  • 2021-05-19
猜你喜欢
  • 2021-09-30
  • 2022-12-23
  • 2021-11-27
  • 2021-06-13
  • 2021-12-09
  • 2021-11-19
相关资源
相似解决方案