http://www.cnblogs.com/TenosDoIt/p/3735309.html
话不多说,举个例子:
后续的对乘积和进行进位处理和链接里面的内容一样,链接没有提到的就是下标有一个转换
注意:消除多余的0的时候:while (add[i] == 0&&i>0)
i不能小于0;
代码:
C++:
string multiply(string num1, string num2) {
int m = num1.size(), n = num2.size();
int k = m + n - 2;
vector<int> add(n + m, 0);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
add[k - i - j] += (num1[i] - '0')*(num2[j] - '0');
}
}
int carry = 0;
int i;
for (i = 0; i < m + n; i++) {
add[i] += carry;
carry = add[i] / 10;
add[i] = add[i] % 10;
}
while (add[--i] == 0)
;
string ans = "";
if (i < 0)
return "0";
while (i >= 0) {
ans.push_back(add[i--] + '0');
}
return ans;
}
java:
public String multiply(String num1, String num2) {
int m = num1.length(), n = num2.length();
int k = m + n - 2;
int add[] =new int[n + m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
add[k - i - j] += (num1.charAt(i)-'0')*(num2.charAt(j) - '0');
}
}
int carry = 0;
int i;
for (i = 0; i < m + n; i++) {
add[i] += carry;
carry = add[i] / 10;
add[i] = add[i] % 10;
}
i=i-1;
while (add[i] == 0&&i>0)
i--;
String ans = "";
if (i < 0)
return "0";
while (i >= 0) {
ans=ans+(add[i--]);
}
return ans;
}