java大数四则运算

本文详细探讨了Java中处理大数的四则运算,包括如何使用BigInteger类进行加减乘除操作,以及在运算过程中涉及的精度问题和性能考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



    /**
     * 两数相加
     * @param numStr1 数1
     * @param numStr2 数2
     * @return 结果
     */
    public static String add(String numStr1, String numStr2){
   

        int numLen1 = numStr1.length();
        int numLen2 = numStr2.length();

        int[] numArray1 = new int[numLen1]; //数字数组
        int[] numArray2 = new int[numLen2];



        // "12345"-> [5,4,3,2,1]
        for(int i=0;i<numLen1;i++){
   
            String c = numStr1.substring(i,i+1);
            numArray1[numLen1-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
        }
        for(int i=0;i<numLen2;i++){
   
            String c = numStr2.substring(i,i+1);
            numArray2[numLen2-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
        }


        int minLen = 0; //取长度小的数位数
        int maxLen = 0; //取长度大的数位数
        int[] maxArray = null; //长度大的数
        if(numLen1<numLen2){
   
            minLen = numLen1;
            maxLen = numLen2;
            maxArray = numArray2;
        }else{
   
            minLen = numLen2;
            maxLen = numLen1;
            maxArray = numArray1;
        }

        int[] resultArray = new int[maxLen+1]; //考虑到可能会进位,多给一个元素空间

        //两数长度相同的部分,同位相加,超出9进1
        int added = 0;
        int i=0;
        for(;i<minLen;i++){
   
            int t = numArray1[i]+numArray2[i]+added; //两数相加,再加进位
            if(t>9){
   
                added = 1; //进1
                resultArray[i] = t-10; //当前位计算结果
            }else{
   
                added = 0; //不进位
                resultArray[i] = t; //当前位计算结果
            }
        }
        //长度超出部分累加
        for(;i<maxLen;i++){
   
            int t = maxArray[i]+added; //多余位数加上进位
            if(t>9){
   
                added = 1; //进1
                resultArray[i] = t-10; //当前位计算结果
            }else{
   
                added = 0; //不进位
                resultArray[i] = t; //当前位计算结果
            }
        }
        resultArray[i] = added; //最高位

        //拼接结果 [1,4,8,2,0] -> 2841
        StringBuilder builder = new StringBuilder();
        for(int n=resultArray.length-1;n>=0;n--){
   
            //如果最高位为0,移除
            if(n==resultArray.length-1 && resultArray[resultArray.length-1]==0){
   
                continue; //跳过
            }else{
   
                builder.append(resultArray[n]);
            }
        }

        return builder.toString();
    }

    /**
     * 两数相减
     * @param numStr1 数1
     * @param numStr2 数2
     * @return 结果
     */
    public static String subtract(String numStr1,String numStr2){
   
        int numLen1 = numStr1.length();
        int numLen2 = numStr2.length();

        int[] numArray1 = new int[numLen1]; //数字数组
        int[] numArray2 = new int[numLen2];



        // "12345"-> [5,4,3,2,1]
        for(int i=0;i<numLen1;i++){
   
            String c = numStr1.substring(i,i+1);
            numArray1[numLen1-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
        }
        for(int i=0;i<numLen2;i++){
   
            String c = numStr2.substring(i,i+1);
            numArray2[numLen2-i-1] = Integer.parseInt(c); //低位存字符串尾部数字
        }


        int minLen = 0; //取长度小的数位数
        int maxLen = 0; //取长度大的数位数
        int[] maxArray = null; //数值大的数
        if(numLen1<numLen2){
   
            minLen = numLen1;
            maxLen = numLen2;
            maxArray = numArray2;
        }else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值