您的位置:首页 > 其它

[leetcode]Multiply Strings

2013-09-20 20:52 381 查看
高精度大数相乘。首先是用数组存大数,然后关键的是ans[i+j] += num1[i]*num2[j]。数组中的数这时可能会大于10,就扫一遍做进位处理。

编写中犯过的两个错:1.ans[i+j] += num1[i]*num2[j]没有写+;2.略过末尾的0时,忘记判断index>=0;3.如果结果是0,就是所有的都是0时,要单独返回“0”

参考:http://blog.csdn.net/u011328276/article/details/9464817

public class Solution {
public String multiply(String num1, String num2) {
int ans[] = new int[num1.length()+num2.length()];
int len1 = num1.length();
int len2 = num2.length();
for (int i = 0; i < len1; i++)
{
for (int j = 0; j < len2; j++)
{
ans[i+j] += (num1.charAt(len1-i-1) - '0') *
(num2.charAt(len2-j-1) - '0');
}
}
for (int i = 0; i < len1+len2; i++)
{
if (ans[i] >= 10)
{
ans[i+1] += ans[i] / 10;
ans[i] = ans[i] % 10;
}
}
StringBuffer sb = new StringBuffer();
int i = len1+len2-1;
while (i >= 0 && ans[i] == 0)
{
i--;
}
for (; i >= 0; i--)
{
sb.append(ans[i]);
}
String result = sb.toString();
if (result.length() == 0) return "0";
else return result;
}
}


second time:

class Solution {
public:
string multiply(string num1, string num2) {
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
vector<char> ans(num1.size() + num2.size());
for (int i = 0; i < num1.size(); i++)
{
for (int j = 0; j < num2.size(); j++)
{
ans[i+j] += (num1[i] - '0') * (num2[j] - '0');
ans[i+j+1] += ans[i+j] / 10;
ans[i+j] = ans[i+j] % 10;
}
}
string s;
bool nonzero = false;
for (int i = ans.size()-1; i >= 0; i--)
{
if (!nonzero && ans[i] == 0)
continue;
nonzero = true;
s.push_back((char) (ans[i]+'0'));
}
if (s == "") return "0";
return s;
}
};


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