您的位置:首页 > 其它

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: