【leetcode】43-字符串相乘【C++】

题目如下:

解题思路:

竖式乘法,代码如下:

class Solution {
public:
    string multiply(string num1, string num2) {
        if(num1 == "0" || num2 == "0")
            return "0";
        int m = num1.size();
        int n = num2.size();
        vector<int> res(m+n) ; //默认初始化为0 
        for(int i = m-1; i >= 0; i--){
            for(int j = n-1; j >= 0; j--){
                int tmp = (num1[i] - '0') * (num2[j] - '0'); //两个位数上的乘积
                tmp += res[i + j + 1]; //先加当前对应的低位,判断是否有进位
                //分别处理进位
                res[i + j + 1] = tmp % 10; //低位
                res[i + j] += tmp / 10; //高位
             }
        }
        //去掉前导0
        int i = 0;
        while(i < m + n - 1 && res[i] == 0)
            i++;
        string res_out;
        for(; i < m + n; i++)
            res_out.append(to_string(res[i])); //string类型的append函数
        return res_out; 
    }
};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值