国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

一個實現長整型數相加減的小程序

2019-11-18 11:19:46
字體:
來源:轉載
供稿:網友

聯合國科教文組織要統計人口,顯然一般的int不能滿足需要,因此要求定義一個BigInteger的新類,實現超長整型數的加減乘除四則運算,我用轉化為數組的方法實現了加、減,有點小bug,而且不知道怎么實現乘除:(
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

//6.7.11
public class BigInteger//定義長整型的類
{
    PRivate static final int add1Max=100;//可計算最長位數
    private static final int add2Max=100;//同上
    private char[] add1 = new char[add1Max];
    private char[] add2 = new char[add1Max];
    private int len1;
    private int len2;
    public void setAdd1() throws IOException
    {
        int i=0;
        String sLine1;
        System.out.print("Please input add1 : ");//輸入第一個長整數
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        sLine1=in.readLine();
        for(;i<sLine1.length();i++)
            add1[i]=sLine1.charAt(i);
       
        for(i=0;i<add1Max;i++)//len1=add1.length()
        {
            if(add1[i]!='/0')
                len1++;
        }
    }
    public void setAdd2() throws IOException
    {
        int i=0;
        String sLine2;
        System.out.print("Please input add2 : ");//輸入第二個長整數
        BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));
        sLine2 = in2.readLine();
        for(i=0;i<sLine2.length();i++)
            add2[i]=sLine2.charAt(i);
       
        for(i=0;i<add2Max;i++)//len2=add2.length()
        {
            if(add2[i]!='/0')
                len2++;
        }
    }
    public char[] getAdd1()
    {
        return add1;
    }
    public char[] getAdd2()
    {
        return add2;
    }
    public int getLen1()
    {
        return len1;
    }
    public int getLen2()
    {
        return len2;
    }
    public void add(char[] add1,char[] add2)//BigInteger相加方法
    {
        int len = Math.max(len1,len2);
        int i;
        char[] temp1 = new char[len];
        char[] temp2 = new char[len];
        char[] result = new char[len+1];
               
        for(i=0;i<len1;i++)
            temp1[len-1-i]=add1[len1-1-i];
        for(i=0;i<len2;i++)
            temp2[len-1-i]=add2[len2-1-i];
       
        int m=0;
        for(i=0;i<len;i++)//相加
        {
            if(temp1[len-1-i]!=0)
                temp1[len-1-i]-=48;
            if(temp2[len-1-i]!=0)
                temp2[len-1-i]-=48;
            m=temp1[len-1-i]+temp2[len-1-i];
            if(m>=10)
            {
                m-=10;
                result[len-i]+=m;
                result[len-1-i]+=1;
            }
            else result[len-i]+=m;
        }
       
        System.out.print("add1 + add2 = ");//輸出相加結果
        i=0;
        if(result[0]==0)
            i=1;
            for(;i<len+1;i++)
                System.out.print(Integer.toString(result[i]));
    }
    public void sub(char[]sub1,char[]sub2)//BigInteger相減方法
    {
        int len = Math.max(len1,len2);
        int i;
        char[] temp1 = new char[len];
        char[] temp2 = new char[len];
        char[] result = new char[len+1];
               
        if(len1>len2)
        {
            for(i=0;i<len1;i++)
                temp1[len-1-i]=sub1[len1-1-i];
            for(i=0;i<len2;i++)
                temp2[len-1-i]=sub2[len2-1-i];
        }else//保證減數大于被減數
        {
            for(i=0;i<len1;i++)
                temp2[len-1-i]=sub1[len1-1-i];
            for(i=0;i<len2;i++)
                temp1[len-1-i]=sub2[len2-1-i];
        }
       
        int m=0;
        for(i=0;i<len;i++)//相減
        {
            if(temp1[len-1-i]!=0)
                temp1[len-1-i]-=48;
            if(temp2[len-1-i]!=0)
                temp2[len-1-i]-=48;
            m=temp1[len-1-i]-temp2[len-1-i];
            if(m<0)//假如計算的那一位的減數小于被減數那么相前一位借10
            {
                m+=10;
                result[len-i]+=m;
                temp1[len-1-i]-=1;
            }
            else result[len-i]+=m;
        }
        System.out.print("add1 - add2 = ");//輸出減法結果
        i=0;
        while(result[i]==0)
            i++;
        if((len2>len1)(len1==len2&&sub1[0]<sub2[0]))
            System.out.print("-");
            for(;i<len+1;i++)
                System.out.print(Integer.toString(result[i]));
    }
    public static void main(String[] args) throws IOException//主方法   
    {
        BigInteger big = new BigInteger();//生成一個BigInteger對象
        big.setAdd1();//得到數1
        big.setAdd2();//得到數2
        char[] num1 = big.getAdd1();//相加
        char[] num2 = big.getAdd2();//相減
        int len1 = big.getLen1();
        int len2 = big.getLen2();
        System.out.println();
        System.out.println("The length of add1 is : " + len1);
        System.out.println("The length of add2 is : " + len2);
        big.add(num1,num2);
        System.out.println();
        big.sub(num1,num2);
    }
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南部县| 兴国县| 高淳县| 凤庆县| 贺兰县| 辽阳市| 隆回县| 大新县| 普洱| 宁都县| 奉节县| 贵溪市| 本溪市| 铜梁县| 车致| 三门峡市| 安岳县| 漯河市| 桃江县| 玉林市| 枣阳市| 五华县| 临漳县| 桃江县| 雅安市| 定日县| 团风县| 钟祥市| 新乡市| 苍南县| 贵德县| 若尔盖县| 温州市| 历史| 眉山市| 耿马| 宝应县| 瑞丽市| 贵德县| 丽江市| 留坝县|