求助:仅使用String类实现数字字符串循环相加及进位处理的方法
解决数字字符串相加(仅用String类)的思路与实现
嘿,我懂你卡在哪了——直接按位取char相加没处理进位,肯定得不到正确结果,尤其是当两位加起来大于等于10的时候!咱们不用那些包装类,纯靠String和循环就能搞定,思路其实和咱们手工做加法一模一样:
核心思路拆解
- 从右往左算:就像用笔算加法,先算个位,再算十位、百位,所以要从两个字符串的末尾开始遍历
- 带上进位玩:每一位相加的时候,得加上上一位算出来的进位值
- 处理长度差:如果两个字符串长度不一样,短的那串前面的位置就当0来算
- 收尾进位:循环结束后如果还有进位(比如
999+1=1000这种情况),得把这个进位加到结果最前面 - 逆序拼接结果:因为咱们是从后往前算的,每一位结果要倒着存,最后反转才能得到正确顺序
代码实现示例(Java)
public class StringAddition { public static String addStrings(String nb, String nb2) { // 用StringBuilder存中间结果,方便追加字符 StringBuilder result = new StringBuilder(); // 两个指针分别指向两个字符串的末尾 int i = nb.length() - 1; int j = nb2.length() - 1; // 进位初始化为0 int carry = 0; // 只要还有没算完的位,或者还有进位,就继续循环 while (i >= 0 || j >= 0 || carry > 0) { // 取出当前位的数字,指针越界就取0 int digit1 = i >= 0 ? nb.charAt(i) - '0' : 0; int digit2 = j >= 0 ? nb2.charAt(j) - '0' : 0; // 计算当前位的总和(加上进位) int sum = digit1 + digit2 + carry; // 当前位的结果:总和对10取模 int currentDigit = sum % 10; // 更新进位:总和除以10取整 carry = sum / 10; // 把当前位加到结果里(注意是追加到末尾,最后要反转) result.append(currentDigit); // 指针左移一位 i--; j--; } // 因为是从后往前加的,所以要反转得到正确顺序 return result.reverse().toString(); } public static void main(String[] args) { String nb = "135"; String nb2 = "135"; System.out.println(addStrings(nb, nb2)); // 输出 "270" } }
关键细节解释
- char转数字:
nb.charAt(i) - '0'是把字符形式的数字转成整数,比如字符'5'的ASCII码减去'0'的ASCII码,就得到整数5 - 循环条件:
i >=0 || j >=0 || carry>0确保所有位都算完,且最后剩下的进位也被处理 - StringBuilder的使用:比直接拼接String效率高,而且自带反转方法,非常方便
你可以把这段代码跑一下,测试不同的情况,比如一长一短的字符串(比如"999"和"1"),或者有连续进位的场景,都能得到正确结果。
内容的提问来源于stack exchange,提问作者user11362352
相关产品推荐
相关产品推荐

