java超大数计算

8 篇文章 0 订阅
package com.fl.algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BigIntAdd { 
  
    private int[] array;//声明一个数组 
     
    //计算大数相加的函数 
    public static String bigAdd(BigIntAdd fisrtNum, BigIntAdd secondNum) { 
         
        String result = ""; 
        boolean falg = false;//判断数组是否越界的标志 
        int[] arrayOne; 
        int[] arrayTwo; 
        int[] arrayThree = null; 
         
        //把较长的字符串放到arrayOne数组中,因为要把计算结果放到arrayOne数组中 
        if (fisrtNum.instance().length >= secondNum.instance().length) { 
            arrayOne = fisrtNum.instance(); 
            arrayTwo = secondNum.instance(); 
         } else { 
            arrayOne = secondNum.instance(); 
            arrayTwo = fisrtNum.instance(); 
         } 
 
        for (int i = 0; i < arrayTwo.length; i++) { 
            if (arrayOne[i] + arrayTwo[i] < 10) {//不需要进位时 
                arrayOne[i] = arrayOne[i] + arrayTwo[i]; 
            } else if (arrayOne[i] + arrayTwo[i] >= 10) {//需要进位时 
                arrayOne[i] = arrayOne[i] + arrayTwo[i] - 10; 
                 
                if ((i + 1) < arrayOne.length) { 
                    arrayOne[i + 1] = arrayOne[i + 1] + 1;//下一位的值加1 
                } else { 
                    //当arrayOne的长度不够时要把其复制到arrayThree中 
                    falg = true; 
                    arrayThree = new int[arrayOne.length + 1]; 
                    System.arraycopy(arrayOne, 0, arrayThree, 0,arrayOne.length); 
                    arrayThree[arrayOne.length] = 1;//把arrayThree最高位赋值1,等价于进位的1 
                } 
            } 
        } 
         
        //把数组arrayThree中的元素全部的拼接为字符串 
        if (falg) { 
            for (int i : arrayThree) { 
                result += i; 
            } 
        } else { 
            for (int i : arrayOne) { 
                result += i; 
            } 
        } 
        //把结果反转返回 
        return new StringBuffer(result).reverse().toString(); 
    } 
     
        //初始化数组方法 
        private int[] instance() { 
            return array; 
        } 
     
       //初始化构造方法 
        public BigIntAdd(String num) { 
            StringBuffer sb = new StringBuffer(num); 
            String string = sb.reverse().toString();//实现字符串反转,便于计算 
            array = new int[string.length()]; 
            //把字符串转化为数组 
            for (int i = 0; i < string.length(); i++) { 
                array[i] = Integer.valueOf(string.substring(i, i + 1)); 
            } 
        } 
         
         
        public static  void  main(String [] args) throws IOException{
         BufferedReader br = new BufferedReader(
        new InputStreamReader(System.in));
         System.out.print("请输入第一个数字:");
         String str1 = br.readLine();
         System.out.print("请输入第二个数字:");
         String str2 = br.readLine();
            String result=BigIntAdd.bigAdd(new BigIntAdd(str1), new BigIntAdd(str2)); 
            System.out.println("您输入的第一个数是:"+str1);
            System.out.println("您输入的第二个数是:"+str2);
            System.out.println("两个大数相加结果是:"+result); 
        } 
     
         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值