leetcode:Multiply Strings

本文详细阐述了如何使用字符串表示的任意大小的非负数进行乘法运算,并通过算法实现将其转换为字符串形式的结果。

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

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.


class Solution {
public:
    
    void reverse(string &str)
    {
        if (str.size() == 0)
            return;
            
        int beginIdx = 0;
        int endIdx   = str.size()-1;
        
        while (beginIdx<endIdx)
        {
            int tmp = str.at(beginIdx);
            str[beginIdx] = str[endIdx];
            str[endIdx] = tmp;
            
            beginIdx++;
            endIdx--;
        }
    }

    string multiply(string num1, string num2) {
        
        reverse(num1);
        reverse(num2);
        vector<int> result(num1.size()+num2.size());
        int lastPos;
        
        for (int i=0; i<num1.size(); i++)
        {
            for (int j=0; j<num2.size(); j++)
            {
                int tmp = (num1[i]-'0') * (num2[j]-'0');
                result[i+j] += tmp;
            }
        }
        
        int carry = 0;
        string retValue="";
        for (int i=0; i<result.size(); i++)
        {
            int tmp = result[i]+carry;
        
            if (tmp >= 10)
            {
                result[i] = tmp%10;
                carry = tmp/10;
            }
            else
            {
                result[i] = tmp;
                carry = 0;
            }
        
            retValue = (char)(result[i]+'0') + retValue;
        }
        
        int i=0;
        for (; i<retValue.size(); i++)
        {
            if (retValue[i] != '0')
            {
                retValue = retValue.substr(i, retValue.size()-i);
                break;
            }
        }
        
        if (i == retValue.size() && retValue[retValue.size()-1] == '0')
            return "0";
        else
            return retValue;
    }

};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值