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.
Solution:
We precalculate num1 multiplied by [0...9] and keep the result afterwards we just follow the algorithm typical of multiplying in paper, i.e. 123*456 = 123*6+ 123*5 *10 + 123*4*100, where the last multiplication is just adding zeros.
public class Solution {
public String multiply(String num1, String num2)
{
StringBuilder result=new StringBuilder();
int carryOn=0;
for(int i=num2.length()-1; i>=0; i--)
{
StringBuilder tempResult=new StringBuilder();
for(int j=num1.length()-1; j>=0; j--)
{
carryOn += (Character.getNumericValue(num1.charAt(j)) * Character.getNumericValue(num2.charAt(i)));
tempResult.insert(0,carryOn%10);
carryOn /= 10;
}
if(carryOn>0)
{
tempResult.insert(0,carryOn%10);
carryOn =0;
}
for(int j=i; j<num2.length()-1; j++)
tempResult.append('0');
result = sum(result,tempResult);
}
removeZeros(result);
return result.toString();
}
public StringBuilder sum(StringBuilder sum1, StringBuilder sum2)
{
int carryOn = 0;
StringBuilder result = new StringBuilder();
for(int i=0; i<sum2.length() || i<sum1.length(); i++)
{
if(i<sum2.length())
carryOn += Character.getNumericValue(sum2.charAt(sum2.length()-1-i));
if(i<sum1.length())
carryOn += Character.getNumericValue(sum1.charAt(sum1.length()-1-i));
result.insert(0,carryOn%10);
carryOn /= 10;
}
if(carryOn>0)
result.insert(0,carryOn%10);
return result;
}
public void removeZeros(StringBuilder num)
{
while(num.length()>1 &&num.charAt(0)=='0')
num.deleteCharAt(0);
}
}
No comments :
Post a Comment