Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and num2
, also represented as a string.
Example 1:
Input: num1 = "2", num2 = "3" Output: "6"
Example 2:
Input: num1 = "123", num2 = "456" Output: "56088"
Note:
- The length of both
num1
andnum2
is < 110. - Both
num1
andnum2
contain only digits0-9
. - Both
num1
andnum2
do not contain any leading zero, except the number 0 itself. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
简单直接的就是模拟竖式乘法。
class Solution {
public:
string multiply(string num1, string num2) {
if(num1=="0" || num2=="0")
return "0";
int len1 = num1.size(),len2 = num2.size();
string res = "";
int pos,tem,carry = 0;
reverse(num1.begin(),num1.end());//先对num1和num2做一个逆序,处理起来直观一些
reverse(num2.begin(),num2.end());
for(int i=0;i<len1;i++){
pos = i;//pos表示的是这一个乘法的起始位置,每一次的起始位置由i决定
for(int j=0;j<len2;j++){
tem = (num1[i]-'0')*(num2[j]-'0')+carry;
if(pos<res.length()){//如果当前乘法运算位置小于res的长度,那么就需要将本次乘法结果tem跟res对应pos的数做加法
tem = tem + (res[pos]-'0');
res[pos] = tem%10+'0';
}
else if(pos>=res.length()){//如果当前乘法运算位置大于或等于当res长度,只需要把当前乘法结果tem添加到res末尾。
res.append(1,(tem%10)+'0');
}
carry = tem/10;
pos++;
}
if(carry > 0)
res.append(1,carry%10+'0');
carry = 0;
}
reverse(res.begin(),res.end());
return res;
}
};
不是太难的题,但是卡了好久,,,,还是需要提高。