In: Computer Science
Using Java
Although the long data type can store large integers, it cannot store extremely large values such as an integer with 100 digits. Create a HugeNumber class that uses a linked list of single digits to represent non-negative integers of arbitrary length. The class should include a method to add a new most significant digit to the existing number so that longer and longer numbers can be created. Also add methods to reset the number and to return the value of the huge integer as a String (is this toString?) along with appropriate constructor and accessor methods.
In addition to the requirements given above, implement an inner class iterator which will allow you to sequence through the digits of the HugeNumber one at a time.
Decide if the HugeNumber contains no digits, then converting it to a String should return a “-1” or an empty string and document your decision.
Submit program files for your HugeNumber class and of your class containing main. Include at least test cases for 3 huge numbers, each with 12 or more digits. Make sure to demonstrate the methods to reset the HugeNumber, to return the number as a String, and to iterate through the digits of the HugeNumber one at a time.
I have written the complete Java code for given conditions. Few Points to note are:
1) toString() : This function cannot be used here to copy the contents of linked list in a string as it will keep the elements separately only as shown below:
The number is: [9, 2, 7, 6, 1, 0, 4, 7, 7, 6, 5, 4, 2]
which obviously we don't want as it seems in your question.
So, to print the the complete huge number as a whole, we need to add elements of linked list in a string using a loop as shown below:
String returnNumber() //return the number as
string
{
if(ll.size() == 0) //
check if the linked list is empty
return
""; // return empty string if true
String number = "";
for(int digit : ll)
//copy the elements of the linked list in a string
{
number = number
+ digit;
}
return number; //
return the string of huge number
}
2) You will need to import the java.util.* package to use the LinkedList class in Java as shown below:
import java.util.*;
3) Complete Code is as follows:
import java.util.*;
class HugeNumber{
LinkedList<Integer> ll = new
LinkedList<Integer>(); //empty linked list
void addMSD(int n) //adding elements to
most significant digit
{
ll.addFirst(n);
}
void resetNumber() //reset the
string
{
ll.clear();
System.out.println("success.");
}
String returnNumber() //return the number
as string
{
if(ll.size() == 0) //
check if the linked list is empty
return
""; // return empty string if true
String number = "";
for(int digit : ll)
//copy the elements of the linked list in a string
{
number = number
+ digit;
}
return number; //
return the string of huge number
}
void iterateElements()
{
//Inner class iterator
class ListIterator
{
void
iterate()
{
Iterator<Integer> it =
ll.iterator();
System.out.print("Iterating the elements of
linked list: ");
while(it.hasNext())
//iterate the elements one by one
{
int digit =
(Integer)it.next();
System.out.print(digit + "
");
}
System.out.println();
}
}
//calling the inner class
function
ListIterator itr = new
ListIterator();
itr.iterate();
}
}
//class containing main function
public class Number {
public static void main(String[] args) {
//create objects for 3 huge
number
HugeNumber number1 = new
HugeNumber(); //create object of class HugeNumber
HugeNumber number2 = new
HugeNumber();
HugeNumber number3 = new
HugeNumber();
HugeNumber number4 = new
HugeNumber();
//add elements in number 1
number1.addMSD(2);
number1.addMSD(4);
number1.addMSD(5);
number1.addMSD(6);
number1.addMSD(7);
number1.addMSD(7);
number1.addMSD(4);
number1.addMSD(0);
number1.addMSD(1);
number1.addMSD(6);
number1.addMSD(7);
number1.addMSD(2);
number1.addMSD(9);
//add elements in number 2
number2.addMSD(1);
number2.addMSD(2);
number2.addMSD(3);
number2.addMSD(4);
number2.addMSD(4);
number2.addMSD(5);
number2.addMSD(6);
number2.addMSD(7);
number2.addMSD(8);
number2.addMSD(5);
number2.addMSD(9);
number2.addMSD(0);
number2.addMSD(4);
number2.addMSD(8);
//add elements in number 3
number3.addMSD(6);
number3.addMSD(2);
number3.addMSD(7);
number3.addMSD(2);
number3.addMSD(0);
number3.addMSD(0);
number3.addMSD(0);
number3.addMSD(6);
number3.addMSD(3);
number3.addMSD(7);
number3.addMSD(3);
number3.addMSD(2);
//Number 1 operations
System.out.println("NUMBER
1:");
String number =
number1.returnNumber();
if(number.isEmpty())
{
System.out.println("Empty String");
}
else
{
System.out.println("The number is: " + number);
}
//Iterate the elements
number1.iterateElements();
//Reset number 1
System.out.print("Reset number 1:
");
number1.resetNumber();
//number 2 operations
System.out.println("NUMBER
2:");
number =
number2.returnNumber();
if(number.isEmpty())
{
System.out.println("Empty String");
}
else
{
System.out.println("The number is: " + number);
}
//Iterate the elements
number2.iterateElements();
//Reset number 2
System.out.print("Reset number 2:
");
number2.resetNumber();
//Number 3 operations
System.out.println("NUMBER
3:");
number =
number3.returnNumber();
if(number.isEmpty())
{
System.out.println("Empty String");
}
else
{
System.out.println("The number is: " + number);
}
//Iterate the elements
number3.iterateElements();
//Reset number 2
System.out.print("Reset number:
");
number3.resetNumber();
//number 4 operations
System.out.println("NUMBER
4:");
number =
number4.returnNumber();
if(number.isEmpty())
{
System.out.println("Empty String");
}
else
{
System.out.println("The number is: " + number);
}
}
}
Note : Please refer to the screenshot of the code below to understand the indentation of the code
Output: