Leetcode:字符串相乘

题目

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

解法

这道题感觉提供了一个非常好的算大数相乘的方法,就是将数字转换成字符串,由于是字符串形式就可以足够大;模仿大数相乘就可以解决此问题,这道题自己开始真的没有什么思路,只能借鉴大神的代码:

class Solution {
public:
    string multiply(string num1, string num2) {
        int carry=0;
        string res;
        vector<int> w(num1.size()+num2.size(),0);
        for(int i=0;i<num1.size();++i)
        {
            for(int j=0;j<num2.size();++j)
            {
                int temp=num1.size()-1+num2.size()-1-i-j;
                w[temp]+=(num1[i]-'0')*(num2[j]-'0');
            }
        }
        
        for(int j=0;j<num1.size()+num2.size();++j)
        {
            w[j]+=carry;
            carry=w[j]/10;
            w[j]=w[j]%10;
        }
        
        int i=num1.size()+num2.size()-1;
        while(w[i]==0) --i;
        if(i<0) return "0";
        while(i>=0)
            res.push_back(w[i--]+'0');
        return res;
    }
};
posted @ 2018-09-12 00:33  MrYun  阅读(142)  评论(0)    收藏  举报