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.
public class Solution { public String multiply(String num1, String num2) { String ret = new String(); int len1 = num1.length(); int len2 = num2.length(); if(0 == len1 || 0 == len2) return ret; String rNum1 = new StringBuffer(num1).reverse().toString(); String rNum2 = new StringBuffer(num2).reverse().toString(); // At first, was trying to store everything in string operation as well. Quite complicated. int[] res = new int[len1 + len2 + 1]; for(int i = 0; i != len2; ++i){ int vi = rNum2.charAt(i) - '0'; for(int j = 0; j != len1; ++j){ res[i+j] += (rNum1.charAt(j) - '0') * vi; } } int carry = 0; for(int k = 0; k != len1 + len2 +1; ++k){ res[k] += carry; carry = res[k] / 10; res[k] = res[k] % 10; } StringBuilder sb = new StringBuilder(); int k = len1 + len2; while(k >=0){ if(0 == res[k]) --k; else break; } while(k >= 0){ sb.append(res[k--]); } if(sb.toString().isEmpty()){ return new String("0"); } return sb.toString(); } }
No comments:
Post a Comment