43. Multiply Strings
2016-12-03 15:48
267 查看
problem:
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.
Converting the input string to integer is NOT allowed.
You should NOT use internal library such as BigInteger.
题目的意思是计算两个字符串表示的非负数的乘积。按照平时笔算的思路,先从低位开始,依次计算并记录进位即可。
注意要先把两个string使用reverse()函数反向一下,使得低位在前,高位在后,方便循环操作。
值得注意的是不能直接计算然后一次性转成数组,所以在每一步的时候,都要记录一次数据。设置一个标记pos记录要放入的位置序号,若当前位置有值,则将result中的值取出来,求和后再放入;若当前位置无值,就直接append进去。
class Solution {
public:
string multiply(string num1, string num2) {
string result = "";
if(num1.length()==0 || num2.length()==0)
return result;
if(num1 == "0" || num2 == "0")
return "0";
//从低位到高位依次计算
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int carry = 0; //保存进位信息
int sum = 0;
int temp = 0;
int i=0;
for(; i<num2.size(); i++)
{
carry = 0;
int pos = i;
for(int j=0; j<num1.size(); j++)
{
temp = (num2[i] - '0') * (num1[j] - '0') + carry;
if(pos < result.length())
{
temp += result[pos] - '0';
result[pos] = temp % 10 + '0';
}
else
result.append(1, temp%10+'0');
carry = temp /10;
pos++;
}
if(carry != 0)
result.append(1, carry + '0');
}
reverse(result.begin(), result.end());
return result;
}
};
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.
Converting the input string to integer is NOT allowed.
You should NOT use internal library such as BigInteger.
题目的意思是计算两个字符串表示的非负数的乘积。按照平时笔算的思路,先从低位开始,依次计算并记录进位即可。
注意要先把两个string使用reverse()函数反向一下,使得低位在前,高位在后,方便循环操作。
值得注意的是不能直接计算然后一次性转成数组,所以在每一步的时候,都要记录一次数据。设置一个标记pos记录要放入的位置序号,若当前位置有值,则将result中的值取出来,求和后再放入;若当前位置无值,就直接append进去。
class Solution {
public:
string multiply(string num1, string num2) {
string result = "";
if(num1.length()==0 || num2.length()==0)
return result;
if(num1 == "0" || num2 == "0")
return "0";
//从低位到高位依次计算
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int carry = 0; //保存进位信息
int sum = 0;
int temp = 0;
int i=0;
for(; i<num2.size(); i++)
{
carry = 0;
int pos = i;
for(int j=0; j<num1.size(); j++)
{
temp = (num2[i] - '0') * (num1[j] - '0') + carry;
if(pos < result.length())
{
temp += result[pos] - '0';
result[pos] = temp % 10 + '0';
}
else
result.append(1, temp%10+'0');
carry = temp /10;
pos++;
}
if(carry != 0)
result.append(1, carry + '0');
}
reverse(result.begin(), result.end());
return result;
}
};
相关文章推荐
- 43. Multiply Strings
- 43. Multiply Strings
- [*leetcode 43] Multiply Strings
- leetcode做题总结,题目Multiply Strings 43
- 43. Multiply Strings
- 43. Multiply Strings
- 43. Multiply Strings
- 43.Multiply Strings
- [Leetcode]#43 Multiply Strings
- leetcode-43 Multiply Strings
- 43. Multiply Strings
- 43. Multiply Strings
- LeetCode 43 Multiply Strings
- leetcode[43]Multiply Strings
- 43. Multiply Strings
- [Leetcode] #43 Multiply Strings
- LeetCode 43. Multiply Strings
- [LeetCode]43 Multiply Strings
- Leetcode43 Multiply Strings
- Leetcode 43. Multiply StringsI