LeetCode: 43. Multiply Strings
原创
©著作权归作者所有:来自51CTO博客作者yanglingwell的原创作品,请联系作者获取转载授权,否则将追究法律责任
LeetCode: 43. Multiply Strings
题目描述
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.
Note:
The length of both num1 and num2 is < 110.
Both num1 and num2 contains only digits 0-9.
Both num1 and num2 does not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
大意就是让写一个大数乘法的函数。
解题思路
模拟乘法计算的过程。为了方便起见,将字符串翻转。
AC 代码
class Solution {
public:
string multiply(string num1, string num2) {
string ans;
if(num1 == "0" || num2 == "0") return "0";
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int carryNum = 0;
for(int i = 0; i < num1.size(); ++i)
{
for(int j = 0; j < num2.size(); ++j)
{
if(i+j >= ans.size()) ans.resize(i+j+1, 0);
ans[i+j] += (num1[i]-'0')*(num2[j]-'0') + carryNum;
carryNum = ans[i+j]/10;
ans[i+j] %= 10;
}
for(int j = num2.size(); carryNum != 0; ++j)
{
if(i+j >= ans.size()) ans.resize(i+j+1, 0);
ans[i+j] += carryNum;
carryNum = ans[i+j]/10;
ans[i+j] %= 10;
}
}
for(int i = 0; i < ans.size(); ++i)
{
ans[i] += '0';
}
reverse(ans.begin(), ans.end());
return ans;
}
};