Java数值字符串相加
两个纯数字字符串相加,不能用大整数相加的方法,无论多长的数字均可以相加。
核心思路
- 从两个字符串的末尾开始逐位相加
- 处理不同长度的数字(短的数字前面补0)
- 处理进位
- 最后反转结果字符串
关键点:
- 使用charAt(i) - '0’将字符转换为数字
- 使用StringBuilder构建结果字符串
- 处理最高位的进位
package com;/*** 数值字符串相加*/
public class StringAddTest {public static void main(String[] args) {System.out.println(add("123", "456")); // 输出: "579"System.out.println(add("999", "1")); // 输出: "1000"System.out.println(add("0", "0")); // 输出: "0"System.out.println(add("123456789", "987654321")); // 输出: "1111111110"}public static String add(String str1, String str2) {StringBuffer sb = new StringBuffer();char[] chars1 = str1.toCharArray();char[] chars2 = str2.toCharArray();int carry = 0;int c1 = chars1.length - 1;int c2 = chars2.length - 1;while (c1 >= 0 || c2 >= 0 || carry != 0) {int n1 = c1 >= 0 ? chars1[c1] - '0' : 0;int n2 = c2 >= 0 ? chars2[c2] - '0' : 0;int sum = n1 + n2 + carry;int add = sum % 10;sb.append(add);carry = sum / 10;c1--;c2--;}return sb.reverse().toString();}
}