Wednesday, 29 November 2017

Java Program to subtract two large numbers using Linked Lists


Code:

import java.util.*;

public class SubtractLargeNumbersUsingLinkedLists
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        /* Create Linked Lists */
        LinkedList num1 = new LinkedList();
        LinkedList num2 = new LinkedList();
        LinkedList ans = new LinkedList();
        LinkedList tmp = new LinkedList();
        /* Accept numbers */
        System.out.println("Subtracting Large Numbers Using Linked Lists Test\n");
        System.out.println("Enter number 1");
        String str1 = scan.next();
        System.out.println("Enter number 2");
        String str2 = scan.next();
        /* Find larger number */
        int l1 = str1.length(), l2 = str2.length();
        String s1 = str1, s2 = str2;
        boolean sign = false;
        if (l1 < l2 || (l1 == l2 && str1.compareTo(str2) < 0))
        {
            s1 = str2;
            s2 = str1;
            sign = true;
        }
        l1 = s1.length();
        while (s2.length() != l1)
            s2 = "0" + s2;
        /* Store digits in lists */            
        for (int i = l1 - 1; i >= 0; i--)
        {
            num1.add(s1.charAt(i) - '0');
            /* 9 complement of second number */
            num2.add('9' - s2.charAt(i));
        }    
        /* Add the numbers */        
        int carry = 0;
        for (int i = 0; i < l1; i++)
        {
            int d1 = 0, d2 = 0;            
            try {
                d1 = num1.get(i);
            } 
            catch(Exception e){}            
            try {
                d2 = num2.get(i);
            } 
            catch(Exception e){}                        
            int x = d1 + d2 + carry;
            tmp.add(x % 10);
            carry = x / 10;
        }
        /* Adding carry and storing in ans list*/
        for (int i = 0; i < l1; i++)
        {
            int x = tmp.get(i) + carry;
            ans.add(x % 10);
            carry = x / 10;
        }    
        /* Print number */    
        System.out.print("\nDifference = ");
        if (s1.equals(s2))
            System.out.print("0\n");
        else
        {
            if (sign)
                System.out.print("-");
            /* Dont print leading zeroes */
            int i;
            for (i = ans.size() - 1; i >= 0; i--)
                if (ans.get(i) != 0)
                    break;
            for (; i >= 0; i--)
                System.out.print(ans.get(i));
            System.out.println();
        }                
    }
}


Output:

Subtracting Large Numbers Using Linked Lists Test

Enter number 1
9456738572365648932758346782759273576
Enter number 2
56736823748726353476582734827356545368752365

Difference = -56736814291987781110933802069009762609478789



Subtracting Large Numbers Using Linked Lists Test

Enter number 1
83657367648164375237587648523823975867384567263847286325673682366458782936575682
36572582365783465764756873456765826382758265784685627365826375836576572863872655

Enter number 2
23647236572638468364732576823748726573687273567283689587364723564586458287578263
86836827563287526582786235723878364738568745862358293576548237582365758781878286


Difference = 6001013107552590687285507170007524929369729369656359673830895880187
23246489974184973575480249593918197063773288746164418951992232733378927813825421
0814081994369


Subtracting Large Numbers Using Linked Lists Test

Enter number 1
83748562837562383475628737416872984236198927419812347652388735823741846283754568
27938757268728382365872562837842356872957826874236547375235627947238562794783567
53562377826357197843587645728738523657327471874678456382749836435728974816423653
2342357726378462378672357
Enter number 2
23785623874816487638672368926572358263756837435767555535238568278623758758263857
65846578384573846587657628387648523758273562386237652736486385792719281019018408
29347293758465832701801030812498357801981974384917417418924787329561727418578652
8736582735826353765198481647358365273958635759727385671

Difference = -237856238748164876386723689264886097009192750522919267978216952943
87559830844045310813395109914724030292529308205850010048340038717801736485434358
46323192144171746097701956711088455215524557447954241556171870738297731960488059
043999467039744172755237461996475450317410826022916232257297348713314


More Java Programs:















100+ Best Home Decoration Ideas For Christmas Day 2019 To Make Home Beautiful

Best gifts for Christmas Day | Greeting cards for Christmas Day | Gift your children a new gift on Christmas day This Christmas d...