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;
}
};
作者:YunLambert
-------------------------------------------
个性签名:一名会音乐、爱健身的不合格程序员
可以Follow博主的Github哦(っ•̀ω•́)っ✎⁾⁾