Saturday, July 10, 2021

 Question: Given two decimal numbers represented as Strings, write a function to add those two and return the result

Assumptions: 

1. The input will be having only numbers, will not be having any alphabets or symbols

2. Both the numbers will be positive numbers.

3. One or both numbers might not be having decimal point also is a valid scenario 

eg:

1.    "1.2" + "2.3" = 3.5

2.    "3" + "5" = "8"

3. "3648698147689.368147698" + "6848634.687469717776897811189" = "3648704996324.055617415776897811189"



My Solution:

public static String addStrings(String number1, String number2){
int i=0;
int lengthOfFirstPartOfFirstString = number1.substring(0, number1.contains(".") ? number1.indexOf(".") : number1.length()).length();
int lengthOfFirstPartOfSecondString = number2.substring(0, number2.contains(".") ? number2.indexOf(".") : number2.length()).length();
int lengthOfSecondPartOfFirstString = number1.contains(".") ? number1.substring(number1.indexOf(".")+1).length() : 0;
int lengthOfSecondPartOfSecondString = number2.contains(".") ? number2.substring(number2.indexOf(".")+1).length() : 0;
if(lengthOfFirstPartOfFirstString != lengthOfFirstPartOfSecondString){
StringBuilder padZeroes = new StringBuilder();
while(i++ != Math.abs(lengthOfFirstPartOfFirstString - lengthOfFirstPartOfSecondString)){
padZeroes.append("0");
}
i=0;
if(lengthOfFirstPartOfFirstString > lengthOfFirstPartOfSecondString){
number2 = padZeroes.toString() + number2;
} else{
number1 = padZeroes.toString() + number1;
}
}
if(lengthOfSecondPartOfFirstString != lengthOfSecondPartOfSecondString){
StringBuilder padZeroes = new StringBuilder();
while(i++ != Math.abs(lengthOfSecondPartOfFirstString - lengthOfSecondPartOfSecondString)){
padZeroes.append("0");
}
if(lengthOfSecondPartOfFirstString > lengthOfSecondPartOfSecondString){
if(!number2.contains(".")){
number2 = number2 + ".";
}
number2 = number2 + padZeroes.toString();
} else{
if(!number1.contains(".")){
number1 = number1 + ".";
}
number1 = number1 + padZeroes.toString();
}
}
String number1Rev = strrev(number1);
String number2Rev = strrev(number2);
String output = "";
int carry = 0;
for(int j=0; j<number1Rev.length(); j++){
if(number1Rev.charAt(j) != '.'){
int sum = Integer.parseInt(number1Rev.substring(j, j+1)) + Integer.parseInt(number2Rev.substring(j, j+1)) + carry;
carry = 0;
if(sum > 9){
carry = 1;
sum = sum - 10;
}
output = output + String.valueOf(sum);
} else {
output = output + ".";
}
}
return strrev(output);
}

public static String strrev(String str){
StringBuilder number1StrBld = new StringBuilder(str);
return number1StrBld.reverse().toString();
}