Saturday, August 4, 2018

Q1. Add two numbers without using BigDecimal

Problem Statement : Calculate the sum of two non-negative numbers represented as Strings.

The length of both number1 and number2 is < 4000
Both the number1 and number2 contains only digits.
Should not use any inbuilt library.


Solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.Scanner;

class AddTwoNumbers {
 public static void main(String[] args) {
  AddTwoNumbers instance = new AddTwoNumbers();
  Scanner scanner = new Scanner(System.in);
  System.out.print("Enter first number:");
  String number1 = scanner.nextLine();
  System.out.print("Enter second number:");
  String number2 = scanner.nextLine();
  System.out.print("Result: " + number1 + "+" + number2 + "=");
  System.out.println(instance.addTwoNumbers(number1, number2));
  scanner.close();
 }

 public String addTwoNumbers(String number1, String number2) {
  int length1 = number1.length();
  int length2 = number2.length();
  int carry = 0;
  StringBuilder sb = new StringBuilder();
  int i = 0;
  while (i < length1 || i < length2) {
   int value1 = 0;
   if (length1 < i) {
    value1 = number1.charAt(length1 - 1 - i) - 48;
   }
   int value2 = 0;
   if (length2 < i) {
    value2 = number2.charAt(length2 - 1 - i) - 48;
   }
   int sum = value1 + value2 + carry;
   carry = 0;
   if (sum / 10 != 0) {
    carry = 1;
    sum = sum % 10;
   }
   sb.append(new String(sum + ""));
   i++;
  }
  if (carry == 1) {
   sb.append(1 + "");
  }
  return sb.reverse().toString();
 }
}