您的位置:首页 > 其它

[leetcode] Multiply Strings

2015-02-03 14:50 281 查看

Multiply Strings

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.

分析:
模拟手算乘法即可。分两部分:字符串的乘法,字符串的加法。

例如:
99
* 12
------------------
198
+ 99
------------------
297

class Solution
{
public:
string add(string num1, string num2)
{
string ret = "";
int flag = 0, temp = 0;
int i = num1.size() - 1, j = num2.size() - 1;

for(; i >= 0 || j >= 0; --i, --j)
{
if(i >= 0 && j >= 0)
temp = num1[i] - '0' + num2[j] - '0' + flag;
else if(i >= 0 && j < 0)
temp = num1[i] - '0' + flag;
else
temp = num2[j] - '0' + flag;

flag = temp / 10;
temp = temp % 10;
ret.insert(ret.begin(), '0' + temp);
}

if(flag == 1)
ret.insert(ret.begin(), '1');

return ret;
}

public:
string multiply(string num1, string num2)
{
if(num1 == "0" || num2 == "0")
return "0";

string ret = "", str = "";
int i = 0, j = 0, temp = 0, flag = 0;

for(j = num2.size()-1; j>=0; --j)
{
str = "";
flag = 0;
for(i = num1.size()-1; i>=0; --i)
{
temp = (num1[i] - '0') * (num2[j] - '0') + flag;
flag = temp / 10;
temp = temp % 10;
str.insert(str.begin(), temp + '0');
}
if(flag > 0)
str.insert(str.begin(), flag + '0');

for(int k = j; k < num2.size()-1; k++)
str += "0";

ret = add(str, ret);
}

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