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.
思路:通过一位乘法和字符串加法实现,注意进位问题,注意字符串方向问题。
public class Solution {
public String multiply(String num1, String num2) {
String result = "";
for (int i = num2.length() - 1; i >= 0; i--) {
result = add(result, subMultiply(num1, num2.charAt(i), num2.length() - i - 1));
}
// 去掉高位0,翻转字符串
StringBuilder sb = new StringBuilder();
int count = result.length() - 1;
for (; count >= 0; count--) {
if (result.charAt(count) != '0') {
break;
}
}
for (; count >= 0; count--) {
sb.append(result.charAt(count));
}
return sb.toString().length() == 0 ? "0" : sb.toString();
}
// 反向结果字符串
public String subMultiply(String num, char n, int depth) {
String result = "";
for (int i = 0; i < depth; i++) {
result += "0";
}
int num2 = n - '0';
int over = 0;
for (int i = num.length() - 1; i >= 0; i--) {
int num1 = num.charAt(i) - '0';
int tmp = num1 * num2 + over;
over = 0;
if (tmp > 9) {
over = tmp / 10;
tmp = tmp % 10;
}
result += tmp;
}
if (over != 0) {
result += over;
}
return result;
}
// 反向求和
public String add(String num1, String num2) {
String result = "";
int i = 0;
int over = 0;
while (i < num1.length() && i < num2.length()) {
int a = num1.charAt(i) - '0';
int b = num2.charAt(i) - '0';
int tmp = a + b + over;
over = 0;
if (tmp > 9) {
over = tmp / 10;
tmp = tmp % 10;
}
result += tmp;
i++;
}
while (i < num1.length()) {
int a = num1.charAt(i) - '0';
int tmp = a + over;
over = 0;
if (tmp > 9) {
over = tmp / 10;
tmp = tmp % 10;
}
result += tmp;
i++;
}
while (i < num2.length()) {
int b = num2.charAt(i) - '0';
int tmp = b + over;
over = 0;
if (tmp > 9) {
over = tmp / 10;
tmp = tmp % 10;
}
result += tmp;
i++;
}
if (over != 0) {
result += over;
}
return result;
}
}