JAVA 两个大字符串数字相加

淡淡的烟草味﹌ 2022-05-09 04:36 461阅读 0赞

在平常的业务中也许会有很大的数字无法使用int或者long来存储了,那么只能存储成string类型,当需要两个这样的数字相加的时候,怎么办呢?

字符串假如都是数字,不包含特殊符号或字母

整体步骤:

  1. 将两个字符串长度补全,补成一致长度,长度短的左边补0;
  2. 定义一个新的整形数组,长度为字符串的长度+1,因为结果的长度可能超出原字符串的长度(整形数组值默认为0);
  3. 倒叙循环相加,将结果%10的余位放在低位,结果的/10的结果放在高位;最终合并结果返回。
  1. public String bigNumberPlus(String a, String b) {
  2. int lenA = a.length();
  3. int lenB = b.length();
  4. if(lenA > lenB) {
  5. b = StringUtils.leftPad(b, lenA, "0");
  6. } else {
  7. a = StringUtils.leftPad(a, lenB, "0");
  8. }
  9. int[] arrC = new int[a.length() + 1];
  10. for(int i = a.length()-1; i>=0; i--) {
  11. int ai = Integer.parseInt(a.charAt(i) + "" );
  12. int bi = Integer.parseInt(b.charAt(i) + "" );
  13. int ci = arrC[i+1];
  14. int t = ai + bi + ci;
  15. arrC[i+1] = t%10;
  16. arrC[i] = t/10;
  17. }
  18. StringBuffer res = new StringBuffer();
  19. for(int i = 0; i<arrC.length; i++) {
  20. if(i==0 && arrC[i]==0) continue;
  21. res.append(arrC[i]);
  22. }
  23. return res.toString();
  24. }

方法整体只循环一次,效率还可以,大家还有什么好方法,可以留言讨论!

如果是小数的话,有两种思路:

  1. 补全长度的时候,需要两边都补全,小数点左边的在左边补全0,小数点右边在右边补全0,然后标记小数点所在的位置,剔除小数点,计算完成后,再在固定位置加入小数点即可。
  2. 分开计算:先计算小数点右边的小数部分,计算时需要右边补全;然后计算小数点左边部分,计算时需要左边补全,当右边计算结果大于1的时候,需要左边按照3个字符串计算。

发表评论

表情:
评论列表 (有 0 条评论,461人围观)

还没有评论,来说两句吧...

相关阅读