You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:仅使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:37:28