Leetcode_大数乘法—43. Multiply Strings

本文介绍了一种模拟人们进行竖式乘法的算法,通过使用C++实现字符串形式的两个数字相乘,并详细解释了其背后的逻辑,包括不进位乘法及进位处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目意思就是将两个数字构成的字符串相乘,然后输出,这个题说白了就是一个模拟题,来模拟人们在竖乘的过程中的方法。

下面是我的代码:

class Solution {
public:
    string multiply(string num1, string num2) {
        vector<int> product(num1.size()+num2.size(),0);
            for(int i=num1.size()-1;i>=0;i--)//来模仿人们乘法的过程,最后一位和最后一位相乘
                for(int j=num2.size()-1;j>=0;j--)
                {
                    product[i+j+1]+=(num1[i]-'0')*(num2[j]-'0');//x先不进位,每一位数字先保留后续进位,题目中+1的目的就是将整个字符串处在最后一位。
                }
        
        for(int i=num1.size()+num2.size()-1,t=0;i>=0;i--)//进位的过程,t是进位的数字
        {
            product[i]+=t;
            t=product[i]/10;//求进位
            product[i]%=10;//求属于该位的数字
        }
        int k=0;
        while(k+1<product.size() && product[k] == 0) k++;//之所以k+1因为要确保如果全是0的话,起码输出一个0;
        string res;
        while(k<product.size())
            res+=to_string(product[k++]);//to_string函数直接将数字添加进字符串,k++先添加后+1
        return res;//返回
        
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值