您的位置:首页 > 其它

Leetcode:Multiply Strings

2014-12-17 15:50 204 查看
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.

实现两个字符串数字的乘法,模拟数学乘法即可。

实现代码:

class Solution {
public:
string multiply(string num1, string num2) {
string result;
int carry = 0;
if(num1.size()==1&&num1[0]=='0'||num2.size()==1&&num2[0]=='0')
return "0";
for(int i = 1 ; i < num1.size()+num2.size(); ++i)
{
int sum = carry;
for(int j = 1 ; j <= num1.size(); ++j)
{
if(i+1-j>=1&&i+1-j<=num2.size())
sum += (num1[num1.size()-j]-'0')*(num2[num2.size()-1-i+j]-'0');
}
carry = sum/10;
result.insert(result.begin(),sum%10+'0');
}
if(carry>0)
result.insert(result.begin(),carry+'0');
return result;
}
};
java版:

public class Solution {
public String multiply(String num1, String num2) {
if (num1 == null || num2 == null) {
return null;
}

int len1 = num1.length(), len2 = num2.length();
int len3 = len1 + len2;
int i, j, product, carry;

int[] num3 = new int[len3];
for (i = len1 - 1; i >= 0; i--) {
carry = 0;
for (j = len2 - 1; j >= 0; j--) {
product = carry + num3[i + j + 1] +
Character.getNumericValue(num1.charAt(i)) *
Character.getNumericValue(num2.charAt(j));
num3[i + j + 1] = product % 10;
carry = product / 10;
}
num3[i + j + 1] = carry;
}

StringBuilder sb = new StringBuilder();
i = 0;

while (i < len3 - 1 && num3[i] == 0) {
i++;
}

while (i < len3) {
sb.append(num3[i++]);
}

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