Multiply String-Leetcode

26 篇文章 0 订阅

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:
    string multiply(string num1, string num2) {
        string n1,n2;
        string sum(num1.size()+num2.size()+1,'0');
        int count=0;
        int n=0;
        //尽量让长度短的作为乘数
        if(num1.size()<num2.size()) {
            n1=num2;
            n2=num1;
        }else{
            n1=num1;
            n2=num2;
        }
        //颠倒字符串的字符顺序,使得循环的第一位作为低位
        reverse(n1.begin(),n1.end());
        reverse(n2.begin(),n2.end());
        for(int i=0;i<n2.size();i++){
            int k2=n2[i]-'0';
            count=0;
            for(int j=0;j<n1.size();j++){
                int k1=n1[j]-'0';
                int tmp=sum[i+j]-'0';
                int sum_cur=tmp+count+k2*k1;
                count=sum_cur/10;
                sum[i+j]=sum_cur%10+'0';
            }
            //每以一位乘数遍历完被乘数所有位数,此时若count不为0,则要将其加到sum的下一位里面
            sum[i+n1.size()]=count+'0';
        }
        //获得结果后,要将sum中字符的顺序颠倒过来,得到正确的数值顺序。
        reverse(sum.begin(),sum.end());
        //获取第一个不是0的索引,如果获取失败,则返回npos
        int p=sum.find_first_not_of('0');
        //字符串全都是0的情况,此时返回“0”
        if(sum.find_first_not_of('0')==string::npos)  return "0";
        //否则找到不是0的第一位,并利用substr函数复制子字符串,要求从指定位置开始,并具有指定的长度
        else return sum.substr(p,sum.size());
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值