public class Solution {
public String multiply(String num1, String num2) {
String longStr = (num1.length() > num2.length()) ? num1 : num2;
String shortStr = (num1.length() > num2.length()) ? num2 : num1;
String rst = "";
int index = 0;
while(shortStr.length() - 1 - index >= 0){
int num = shortStr.charAt(shortStr.length() - 1 - index) - '0';
String cur = multiplyOne(longStr, num);
for(int i = index; i > 0; i--){
cur += "0";
}
rst = addTwo(rst, cur);
index ++;
}
return rst;
}
private String multiplyOne(String src, int num){
if(num == 0) return "0";
StringBuilder sb = new StringBuilder();
int carry = 0;
for(int i = src.length() - 1; i >= 0; i--){
int digit = src.charAt(i) - '0';
sb.append((digit * num + carry) % 10);
carry = (digit * num + carry) / 10;
}
if(carry > 0) sb.append(carry);
return sb.reverse().toString();
}
private String addTwo(String num1, String num2){
StringBuilder sb = new StringBuilder();
int i = num1.length() - 1;
int j = num2.length() - 1;
int carry = 0;
while(i >= 0 || j >= 0 || carry > 0){
int digit1 = (i >= 0) ? num1.charAt(i--) - '0': 0;
int digit2 = (j >= 0) ? num2.charAt(j--) - '0': 0;
sb.append((digit1 + digit2 + carry) % 10);
carry = (digit1 + digit2 + carry) / 10;
}
return sb.reverse().toString();
}
}