加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 03:16:37 所属栏目:大数据 来源:网络整理
导读:转自:http://www.cnblogs.com/0201zcr/p/4906283.html 问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。 思路: 1.反转两个字符串,便于从低位到高位相加和最高

转自: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));
	}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读