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.
- Converting the input string to integer is NOT allowed.
- You should NOT use internal library such as BigInteger.
这道题蛮简单的,算两个大数的乘法,模拟手算时的竖式计算即可,需要做MN次乘法和若干次加法,需要耐心~代码如下:
public class Solution {
public String multiply(String num1, String num2) {
int len1 = num1.length();
int len2 = num2.length();
if(num1.equals("0")|| num2.equals("0"))
return "0";
int len = len1 + len2-1;
int carry = 0;
int temp = 0, templeft = 0, tempright = 0;
int sum = 0;
Stack<Integer> st = new Stack<Integer>();
for(int i = 1; i <= len; i++){
for(int j = 1; j <= i; j++){
if( i+1-j > len2 || j > len1){
continue;
}
templeft = Integer.parseInt(num1.substring(len1-j, len1-j+1));
tempright = Integer.parseInt(num2.substring(len2-1-i+j, len2-i+j));
temp = templeft * tempright;
sum = temp + sum;
}
sum +=carry;
st.push(sum % 10);
carry = sum/10;
sum = 0;
}
while(carry != 0){
st.push(carry % 10);
carry /= 10;
}
StringBuilder sb = new StringBuilder();
while(!st.isEmpty()){
sb.append(st.pop());
}
return sb.toString();
}
}