美文网首页
43. 字符串相乘

43. 字符串相乘

作者: __LXF__ | 来源:发表于2020-03-10 14:06 被阅读0次

    1、思路

      两数相乘时,乘数某位与被乘数某位相乘,所产生结果的位置是有规律的。具体规律如下:
      乘数 num1 位数为 MM,被乘数 num2 位数为 NN, num1 x num2 结果 res 最大总位数为 M+N。num1[i] x num2[j] 的结果为 tmp(位数为位,"0x","xy"的形式),其第一位位于 res[i+j],第二位位于 res[i+j+1]。

    2、代码实现(C++)

    class Solution {
    public:
        // 字符串相乘
        string multiply(string num1, string num2) {
            if (num1 == "0" || num2 == "0") {
                return "0";
            }
            int len1 = num1.length();
            int len2 = num2.length();
            string res(len1+len2, '0'); // 结果位数一定小于等于len1+len2位
            for (int i = len2-1; i >= 0; i--) {
                for (int j = len1-1; j >= 0; j--) {
                    int temp = (num1[j]-'0') * (num2[i]-'0') + (res[i+j+1]-'0'); // res[i+j+1]是上次进位
                    res[i+j+1] = temp%10 + '0';   //当前位
                    res[i+j] += temp/10;  // 产生的进位,res[i+j]已经初始化为'0',加上int类型自动转化为char,所以此处不加'0'
                }
            }
            // 去除首位'0'
            for(int i = 0; i < len1+len2; i++){
                if(res[i]!='0')
                    return res.substr(i);
            }
            return "0";
        }
    };
    

    相关文章

      网友评论

          本文标题:43. 字符串相乘

          本文链接:https://www.haomeiwen.com/subject/vtuwdhtx.html