用字符串模拟两个大数相加——java实现
2018-01-25 10:31
441 查看
问题:
大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。
思路:
1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
3.把两个正整数相加,一位一位的加并加上进位。
具体代码如下:
测试:
结果:
大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。
思路:
1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
3.把两个正整数相加,一位一位的加并加上进位。
具体代码如下:
/** * 用字符串模拟两个大数相加 * @param n1 加数1 * @param n2 加数2 * @return 相加结果 */ public static String add2(String n1,String n2) { StringBuffer result = new StringBuffer(); //1、反转字符串 n1 = new StringBuffer(n1).reverse().toString(); n2 = new StringBuffer(n2).reverse().toString(); int len1 = n1.length(); int len2 = n1.length(); int maxLen = len1 > len2 ? len1 : len2; boolean nOverFlow = false; //是否越界 int nTakeOver = 0 ; //溢出数量 //2.把两个字符串补齐,即短字符串的高位用0补齐 if(len1 < len2) { for(int i = len1 ; i < len2 ; i++) { n1 += "0"; } } else if (len1 > len2) { for(int i = len2 ; i < len1 ; i++) { n2 += "0"; } } //3.把两个正整数相加,一位一位的加并加上进位 for(int i = 0 ; i < maxLen ; i++) { int nSum = Integer.parseInt(n1.charAt(i) +"") + Integer.parseInt(n2.charAt(i) +""); 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 str = add2("911","222"); System.out.println(str); }
结果:
1133
相关文章推荐
- 用字符串模拟两个大数相加——java实现
- 用字符串模拟两个大数相加——java实现
- 字符串模拟大数相加——Java实现
- JAVA实现两个大数相加
- java机试-用字符串模拟两个大数相加
- 两个大数相加,使用字符串模拟相加过程
- java实现两个超大数相加,字符串实现
- 两个大数相加,使用字符串模拟相加过程
- java实现两个大数相加,可能出现溢出错误
- Java不使用BigDecimal,实现两个大数相加
- leetcode_415(两个数字字符串相加,模拟大数相加)
- 两个大数相加,使用字符串模拟相加过程
- java实现两个大数相加
- java实现字符串匹配问题之求两个字符串的最大公共子串
- 面试题之自创 实现两个整型大数(都是正数)的相加操作
- java实现字符串匹配问题之求两个字符串的最大公共子串
- java实现大数相加问题
- JAVA字符串用两个分隔符分割的实现
- 4.用链表实现两个大数相加
- 两个大数相加 ----Javascrit 实现