用字符串模拟两个大数相加——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)); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |