Climbing的专栏

Life is limited, but art is long

huang ClimbingID:hpdlzu80100
[修改头像]
1574次访问,排名2万外好友5人,关注者6
热爱生活,积极向上,流自己的汗,吃自己的饭!
hpdlzu80100的文章
原创 23 篇
翻译 0 篇
转载 2 篇
评论 0 篇
最近评论
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    存档

    原创 自定义40位大整数类及测试类(Define a huge integer and implement its arithmetic operation)

    新一篇: 薪水册测试类及结果(Payroll System modification)

     

    //Define a huge integer and implement its arithmetic calculation
    //Java how to program, 5/e, Exercise 8.10


    import javax.swing.*;

    public class HugeInteger {
        
    private int[ ] singleDigits=new int[40];
        
    private int[ ] carry=new int[40];
        
        
    public HugeInteger()
        {
            
    for (int i=0;i<singleDigits.length;i++)
                singleDigits[i]
    =0;
        }
        
    public HugeInteger(int[] hugeI)
        {
            
    for (int i=0;i<singleDigits.length;i++)
                singleDigits[i]
    =hugeI[i];
        }
        
        
    public void reset()
        {
            
    for (int i=0;i<singleDigits.length;i++)
                singleDigits[i]
    =0;
        }
        
        
    public void input()
        {
            
    for (int i=0;i<singleDigits.length;i++)
                singleDigits[i]
    =Integer.parseInt(JOptionPane.showInputDialog("Enter NO. "+i+"digit"));
        }
        
        
    public void output()
        {    System.out.print(
    "Huge Integer: ");
            
    for (int i=0;i<singleDigits.length;i++)
                System.out.print(singleDigits[i]);
                System.out.println();
        }
        
        
    public void add(HugeInteger HI)
        {  
    int[] repository=new int[41];
            
    for (int i=singleDigits.length-1;i>=0;i--
                {
                
    if (i<singleDigits.length-1)
                carry[i]
    =(singleDigits[i]+HI.singleDigits[i]+carry[i+1])/10;
                
    else
                    carry[i]
    =(singleDigits[i]+HI.singleDigits[i])/10;
                
    if (i<singleDigits.length-1)
                repository[i
    +1]=(singleDigits[i]+HI.singleDigits[i]+carry[i+1])%10;
                
    else 
                    repository[i
    +1]=(singleDigits[i]+HI.singleDigits[i])%10;
                }
            repository[
    0]=(carry[1]+singleDigits[0]+HI.singleDigits[0])/10;
               
    if (repository[0]==1)
                   {
                   System.out.print(
    "Overflow Error!!! ");
                   reset();
                   }
               
    else
                   
    for (int i=0;i<singleDigits.length;i++ )
                      singleDigits[i]
    =repository[i+1];
               
        }
        
    public boolean substract(HugeInteger HI)
        {
            
    boolean underflowFlag=false;
            
    int[] repository=new int[41];
            
    for (int i=singleDigits.length-1;i>=1;i--)
            {
            
    if (singleDigits[i]-HI.singleDigits[i]>=0)
                repository[i
    +1]=singleDigits[i]-HI.singleDigits[i];
            
    else
            {
                repository[i
    +1]=10+singleDigits[i]-HI.singleDigits[i];
                singleDigits[i
    -1]-=1;
            }
            }
            
            repository[
    0]=singleDigits[0]-HI.singleDigits[0];
             
    if (repository[0]<0)
               {
               System.out.print(
    "Underflow Error!!! ");
               reset();
               
    return(underflowFlag=true);
               }
           
    else
           {   repository[
    1]=singleDigits[0]-HI.singleDigits[0];
               
    for (int i=0;i<singleDigits.length;i++ )
                   singleDigits[i]
    =repository[i+1];
               
    return(underflowFlag);
             }
        }
        
        
    public boolean isEqualTo(HugeInteger HI){
            
    boolean equalFlag=true;
            
    for (int i=0;i<singleDigits.length;i++)
                
    if (singleDigits[i]!=HI.singleDigits[i])
                {equalFlag
    =false;
                
    break;
                }
            
    return equalFlag;
        }
        
        
    public boolean isNotEqualTo(HugeInteger HI){
            
            
            
    return !isEqualTo(HI);
        }
        
        
    public boolean isGreaterThan(HugeInteger HI){
            
    boolean greaterThanFlag=false;
            
    for (int i=0;i<singleDigits.length;i++)
                {
                
    if (singleDigits[i]>HI.singleDigits[i])
                    {greaterThanFlag
    =true;
                    
    break;}
                
    else if (singleDigits[i]<HI.singleDigits[i])
                        {greaterThanFlag
    =false;
                        
    break;}
                }
        
    return greaterThanFlag;
        }
        
        
    public boolean isLessThan(HugeInteger HI){
            
    boolean lessThanFlag=false;
            
    for (int i=0;i<singleDigits.length;i++)
            { 
    if (singleDigits[i]<HI.singleDigits[i])
                {lessThanFlag
    =true;
                
    break;}
                
    else if (singleDigits[i]>HI.singleDigits[i])
                {lessThanFlag
    =false;
                
    break;}
                }
            
    return lessThanFlag;
        }
        
        
    public boolean isGreaterThanOrEqualTo(HugeInteger HI){
            
            
    return !isLessThan(HI);
        }
        
        
    public boolean isLessThanOrEqualTo(HugeInteger HI){
        
            
    return !isGreaterThan(HI);
            
        }
        
        
    public boolean isZero(){
            
    boolean zeroFlag=false;
            
    int tempSum=0;
            
    for (int i=0;i<singleDigits.length;i++)
                tempSum
    +=singleDigits[i];
                
    if (tempSum==0)
                    zeroFlag
    =true;
            
    return zeroFlag;
        }
    }
    class HugeIntegerTest{
        
    public static void main(String[] args)
        {
            
    int[] initializer1=new int[40];
            
    for (int i=0;i<40;i++)
                initializer1[i]
    =(int)(10*Math.random());
               
            
    int[] initializer2=new int[40];
            
    for (int j=0;j<40;j++)
                initializer2[j]
    =(int)(10*Math.random());
            
            
            
            HugeInteger HI1
    =new HugeInteger(initializer1);
            HugeInteger HI2
    =new HugeInteger(initializer2);
            
            
            HI1.output();
            HI2.output();
            System.out.println();
            
            System.out.println(
    "These two huge integers are equal: "+HI1.isEqualTo(HI2));
            System.out.println(
    "These two huge integers are not equal: "+HI1.isNotEqualTo(HI2));
            System.out.println(
    "1st huge integer is larger than 2nd: "+HI1.isGreaterThan(HI2));
            System.out.println(
    "1st huge integer is less than 2nd: "+HI1.isLessThan(HI2));
            System.out.println(
    "1st huge integer is larger than or equal to 2nd: "+
                    HI1.isGreaterThanOrEqualTo(HI2));
            System.out.println(
    "1st huge integer is less than or equal to 2nd: "+
                    HI1.isLessThanOrEqualTo(HI2));
            HI1.add(HI2);
            System.out.print(
    "The sum is: ");
            HI1.output();
            HI1.substract(HI2);
            HI1.substract(HI2);
            System.out.print(
    "The difference is: ");
            HI1.output();
            HI1.add(HI2);
        }
        
    }

     

    A snapshot of Console after the execution of test class:

    发表于 @ 2008年04月23日 17:48:00|评论(loading...)|编辑

    旧一篇: 武士之旅小游戏(Chess Board game: Tour of knight)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © Climbing