//*****************************************************************************
// A Large Integer class                           
//*****************************************************************************

public class LargeInt
{
    private double num;                                 //value held in a double                   

    public LargeInt()                                   //empty constructor
    {
        this.num = 0;
    }
    public LargeInt(long value)                         //constructor that takes a long
    {
        this.num = value;
    }
    public LargeInt(LargeInt source)                    //copy constructor 
    {
        this.num = source.num;
    }
    public LargeInt clone()                             //clone method
    {
         LargeInt x = new LargeInt(this);
         return(x);
    }
    public LargeInt LargeIntNegate()                    //negate the number
    {
         LargeInt result = new LargeInt(this);
         result.num   *= -1;
         return(result);
    }
    public static LargeInt LargeIntAdd(LargeInt num1, LargeInt num2)            //add method
    {
         LargeInt result = new LargeInt();
         result.num      = num1.num + num2.num;         
         return(result);
    }
    public static LargeInt LargeIntSubtract(LargeInt num1, LargeInt num2)       //subtract
    {
         LargeInt result = new LargeInt();
         result.num      = num1.num - num2.num;         
         return(result);
    }
    public static LargeInt LargeIntMultiply(LargeInt num1, LargeInt num2)       //multiply
    {
         LargeInt result = new LargeInt();
         result.num      = num1.num * num2.num;         
         return(result);
    }
    public static LargeInt LargeIntDivide(LargeInt num1, LargeInt num2)         //divide
    {
         LargeInt result = new LargeInt();
         result.num      = num1.num / num2.num;
         return(result);
    }
    public static LargeInt LargeIntModulus(LargeInt num1, LargeInt num2)        //modulus       
    {
         LargeInt result = new LargeInt();
         result.num      = num1.num % num2.num;
         return(result);
    }
    public String toString()                                    //toString
    {         
         String s = String.valueOf(this.num);                   //convert to a string
         if (s.indexOf("E") == -1)                              //if a small number display without the "E"
             s = s.substring(0, s.indexOf("."));                //strip the decimal point
         return(s);
    }
}