JAVA 两个大字符串数字相加
2017-06-16 23:18
656 查看
JAVA 两个大字符串数字相加
在平常的业务中也许会有很大的数字无法使用int或者long来存储了,那么只能存储成string类型,当需要两个这样的数字相加的时候,怎么办呢?方法中不再验证传入的数字的正确性,默认是正确的。
整体步骤:
将两个字符串长度补全,补成一致长度,长度短的左边补0;
定义一个新的整形数组,长度为字符串的长度+1,因为结果的长度可能超出原字符串的长度(整形数组值默认为0);
倒叙循环相加,将结果%10的余位放在低位,结果的/10的结果放在高位;最终合并结果返回。
public String bigNumberPlus(String a, String b) { int lenA = a.length(); int lenB = b.length(); if(lenA > lenB) { b = StringUtils.leftPad(b, lenA, "0"); } else { a = StringUtils.leftPad(a, lenB, "0"); } int[] arrC = new int[a.length() + 1]; for(int i = a.length()-1; i>=0; i--) { int ai = Integer.parseInt(a.charAt(i) + "" ); int bi = Integer.parseInt(b.charAt(i) + "" ); int ci = arrC[i+1]; int t = ai + bi + ci; arrC[i+1] = t%10; arrC[i] = t/10; } StringBuffer res = new StringBuffer(); for(int i = 0; i<arrC.length; i++) { if(i==0 && arrC[i]==0) continue; res.append(arrC[i]); } return res.toString(); }
方法整体只循环一次,效率还可以,大家还有什么好方法,可以留言讨论!
如果是小数的话,有两种思路:
补全长度的时候,需要两边都补全,小数点左边的在左边补全0,小数点右边在右边补全0,然后标记小数点所在的位置,剔除小数点,计算完成后,再在固定位置加入小数点即可。
分开计算:先计算小数点右边的小数部分,计算时需要右边补全;然后计算小数点左边部分,计算时需要左边补全,当右边计算结果大于1的时候,需要左边按照3个字符串计算。
相关文章推荐
- java两个字符串数字相加
- java 将一个字符串里连续两个及以上数字反转
- 两个数字字符串相加生成新的字符串
- java 将一个字符串里连续两个及以上数字反转
- 用字符串模拟两个大数相加——java实现
- 用字符串模拟两个大数相加——java实现
- java两个大数字相加
- 面试题七 C/C++ 两个字符串由数字组成的相加,最大不超过32bit整形的系统函数--程序员面试题
- leetcode_415(两个数字字符串相加,模拟大数相加)
- 面试题--两个字符串数字相加,不能用jdk自带的类型转换方法
- 两个非常大的数字相加,相减(JAVA)
- LeetCode425——Add Strings(两个字符串中的数字相加(十进制或二进制),输出字符串形式的结果)
- 用字符串模拟两个大数相加——java实现
- 415. Add Strings (计算由两个字符串表示的数字相加之和)
- java实现两个超大数相加,字符串实现
- java两个大数字相加
- 415. Add Strings--两个用字符串表示的数字相加
- JAVA16进制字符串转字符或数字
- Java中判断字符串是否为数字
- java 给字符串数字小数点后补位