summary:
handle carry
package myapp.kit.leetcode.top200;
/**
* 43
* medium
* https://leetcode.com/problems/multiply-strings/
*
* Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2,
* also represented as a string.
*
* Example 1:
*
* Input: num1 = "2", num2 = "3"
* Output: "6"
* Example 2:
*
* Input: num1 = "123", num2 = "456"
* Output: "56088"
* Note:
*
* The length of both num1 and num2 is < 110.
* Both num1 and num2 contain only digits 0-9.
* Both num1 and num2 do not contain any leading zero, except the number 0 itself.
* You must not use any built-in BigInteger library or convert the inputs to integer directly.
*
* @author huangdingsheng
* @version 1.0, 2020/6/24
*/
public class multiply_strings_43 {
public static String multiply(String num1, String num2) {
char[] ch1 = num1.toCharArray();
char[] ch2 = num2.toCharArray();
int x = num1.length();
int y = num2.length();
int[] answer = new int[x + y];
// 1. calculate each item
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
answer[i + j + 1] += (ch1[i] - '0') * (ch2[j] - '0');
}
}
// 2. process carry
int idx1 = 0;
while (idx1 < answer.length && answer[idx1] == 0) {
idx1++;
}
for (int i = answer.length - 1; i > idx1; i--) {
if (answer[i] >= 10) {
answer[i - 1] += answer[i] / 10;
answer[i] = answer[i] % 10;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < answer.length; i++) {
sb.append(answer[i]);
}
int idx = 0;
while (idx <= sb.length() - 1 && sb.charAt(idx) == '0') {
idx++;
}
return idx <= sb.length() - 1 ? sb.substring(idx) : "0";
}
public static void main(String[] args) {
System.out.println(multiply("2", "3"));
}
}