zoukankan      html  css  js  c++  java
  • [LEETCODE 43] 字符串相乘

    [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;
        }
    };
    
  • 相关阅读:
    【[AH2017/HNOI2017]礼物】
    【[ZJOI2014]力】
    FFT抄袭笔记
    【[SCOI2015]小凸玩矩阵】
    【[SDOI2017]新生舞会】
    bzoj 3277: 串
    【[ZJOI2015]诸神眷顾的幻想乡】
    【[TJOI2017]DNA】
    【[TJOI2018]碱基序列】
    【[TJOI2018]异或】
  • 原文地址:https://www.cnblogs.com/mollnn/p/14135348.html
Copyright © 2011-2022 走看看