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();}