43. 字符串相乘

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";
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示...
    genggejianyi阅读 387评论 0 1
  • 描述 给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串...
    ca8519be679b阅读 620评论 0 49
  • 题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也...
    HITZGD阅读 453评论 0 0
  • 题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积...
    不会游泳的金鱼_阅读 193评论 0 0
  • 因焦虑女儿做题的状态,让我对女儿说了一些比较过激的话,调整自己的心态后,当自己静下来,仔细想想,自己对女儿...
    卿城卿国阅读 306评论 0 14