Java实现超大整数加法

方法一:运用数组实现

public class HandleLargeNumber {
	public static void main(String[] args) {
		// 创建a,b,c三个int类型的数组,a和b用来存放要进行相加的超大整数,c用来存放a和b相加之后的结果
		// 存放的超大整数一定要比数组的长度小,以便后期进位
		int[] a = {0,9,9,7,9,4,5,6,7,2,3,4,5,6,4,7,8,9,8,7,6,9};
		int[] b = {0,0,5,9,1,6,4,5,6,2,3,4,5,7,2,1,3,4,0,3,2,9};
		int[] c = new int[a.length]; //数组c和数组a的长度相同
		
		int i = 0, result = 0, k = 0; //i和k作为遍历的临时变量,result作为数组a和b相对应位数字相加的结果
		
		for (i = 0; i < a.length; i++) {
			if(a[i] != 0) { // 找到存放在a数组里的超大整数的最大的一位在数组中的位置,然后把这个位置赋给k变量,退出循环
				k = i;
				break;
			}
		}
		
		for (i = k; i < a.length; i++) {//从存放在a数组里的超大整数的最大的一位在数组中的位置开始遍历数组,以输出a数组中存放的超大整数
			System.out.print(a[i]);
		}
		
		System.out.println("\n加上:");
		
		for (i = 0; i < b.length; i++) {// 找到存放在b数组里的超大整数的最大的一位在数组中的位置,然后把这个位置赋给k变量,退出循环
			if(b[i] != 0) { 
				k = i;
				break;
			}
		}
		
		for (i = k; i < b.length; i++) {//从存放在b数组里的超大整数的最大的一位在数组中的位置开始遍历数组,以输出b数组中存放的超大整数
			System.out.print(b[i]);
		}
		
		System.out.println("\n等于:");
		
		//加法,结果放在数组c中
		for(i = a.length - 1; i >= 0; i--) {
			
			result = a[i] + b[i];// result作为数组a和b相对应位数字相加的结果
			
			if(result >= 10) {//如果result>= 10,那么需要进位。
				c[i] = result % 10;// 对result取余作为c数组对应位的数字
				a[i -1] = a[i - 1] + 1;// 因为进了一位,进位的数字最大为1,所以在上一位要加上进位的1
			}else {// 如果result小于10,那么不需要进位
				c[i] = result;// 直接将数组a和b相对应位置相加的结果放在数组c对应的位置
			}
		}
		
		for (i = 0; i < c.length; i++) {// 找到存放在c数组里的超大整数的最大的一位在数组中的位置,然后把这个位置赋给k变量,退出循环
			if(c[i] != 0) { 
				k = i;
				break;
			}
		}
		
		for (i = k; i < c.length; i++) {//从存放在c数组里的超大整数的最大的一位在数组中的位置开始遍历数组,以输出c数组中存放的超大整数,即相加结果
			System.out.print(c[i]);
		}
	} 
}

运行结果:

方法二:用BigInteger类实现

import java.math.BigInteger;  
  
public class BigIntegerAddition {  
    public static void main(String[] args) {  
        // 创建两个超大整数  
        String num1 = "1234567890123456789012345678901234567890";  
        String num2 = "9876543210987654321098765432109876543210";  
  
        // 将字符串转换为BigInteger对象  
        BigInteger bigNum1 = new BigInteger(num1);  
        BigInteger bigNum2 = new BigInteger(num2);  
  
        // 执行加法操作  
        BigInteger sum = bigNum1.add(bigNum2);  
  
        // 输出结果  
        System.out.println("Sum: " + sum.toString());  
    }  
}

运行结果:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值