[Leetcode]#43 Multiply Strings

本文详细阐述了如何使用字符串表示的任意大小的整数进行相乘,并通过C++代码实现了一个高效的乘法算法。

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

//#43 Multiply Strings
//12ms 56.32%
class Solution {
public:
    string multiply(string num1, string num2) 
    {
        string num3((num1.size() + num2.size()), '0');
        //cout << "Initial num3 = " << num3 << endl;
        for(unsigned int i=0; i<num1.size(); i++)
        {
            int m = num1.size() - i - 1;
            int carry(0);
            for(unsigned int j=0; j<num2.size(); j++)
            {
                int n = num2.size() - j - 1;
                int k = num3.size() - i - j - 1;
                int number = int(num1[m] - '0') * int (num2[n] - '0') + carry + int(num3[k] - '0');
                //cout << "number == " << number << endl;
                carry = number / 10;
                int new_num3_int = number % 10;

                num3[k] = char(new_num3_int + '0');

                //cout << "num3[" << m << "+" << n << "]" << " == " << num3[k] << endl;
            }
            num3[num3.size() - i - num2.size() - 1] = char(carry + '0');
            //cout << "carry == " << "[" << num3.size() - i - num2.size() - 1 << "]" << num3[num1.size() - i - num2.size() - 1] << endl;
        }
        //cout << "Result num3 == " << num3 << endl;

        while(true)
        {
            //cout << "final check\n";
            if(num3.empty()) 
            {
                break;
            }
            if(num3[0] != '0') 
            {
                break;
            }
            //cout << "erase\n";
            num3.erase(num3.begin());
        }

        if(num3.empty()) num3.push_back('0');
        return num3;
    }
};
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值