用字符串模拟两个大数相加——java实现

转自:http://www.cnblogs.com/0201zcr/p/4906283.html

问题:

  大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。

思路:

   1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;

            2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;

            3.把两个正整数相加,一位一位的加并加上进位。

具体代码如下:

package temp.test;

/*
 * 功能:利用字符串模拟大数加法
 */
public class Test {
	
	public static String add(String n1, String n2){
		StringBuilder result = new StringBuilder();
		
		// 反转字符串
		String rn1 = new StringBuilder(n1).reverse().toString();
		String rn2 = new StringBuilder(n2).reverse().toString();
		
		int len1 = rn1.length();
		int len2 = rn2.length();
		
		int maxLen = len1 > len2 ? len1 : len2;
		
		boolean nOverFlow = false;// 是否越界
		int nTakeOver = 0;// 溢出数量
		
		// 把两个字符串补齐,即短字符串的高位用0补齐
		if(len1 < len2){
			for(int i = len1; i < len2; i++){
				rn1 += "0";
			}
		}else{
			for(int i = len2; i < len1; i++){
				rn2 += "0";
			}
		}
		
		// 把两个正整数相加,一位一位的加 并加上进位
		for(int i = 0; i < maxLen; i++){
			int nSum = Integer.parseInt(rn1.charAt(i) + "") + Integer.parseInt(rn2.charAt(i) + "");
			nSum = nSum + nTakeOver;// 加上前一位的进位
			
			if(nSum >= 10){
				if(i == maxLen - 1){// 已经计算到最后一位了
					nOverFlow = true;
				}
				
				nTakeOver = 1;//溢出了
				result.append(nSum - 10);
			}else{
				nTakeOver = 0;// 没溢出
				result.append(nSum);
			}
		}
		
		// 如果溢出的话 表示位增加了
		if(nOverFlow){
			result.append(nTakeOver);
		}
		
		return result.reverse().toString();
	}
	
	public static void main(String[] args){
		String n1 = "999999999";
		String n2 = "999999999";
		System.out.println(Test.add(n1, n2));
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值