https://leetcode-cn.com/problems/add-strings/

    1. class Solution {
    2. public String addStrings(String num1, String num2) {
    3. // 只要2个里面还有一个数字,就要继续算,这一点要体现在while里
    4. StringBuffer buffer = new StringBuffer("");
    5. int i = num1.length() - 1, j = num2.length() - 1;
    6. int carry = 0;
    7. while (i >= 0 || j >= 0) {
    8. int r1 = i >= 0 ? num1.charAt(i) - '0' : 0;
    9. int r2 = j >= 0 ? num2.charAt(j) - '0' : 0;
    10. // 进位+当前值为当前位的和
    11. // %10 为当前位的最终值
    12. // /10 为进位值
    13. int temp = r1 + r2 + carry;
    14. carry = temp / 10;
    15. buffer.append(temp % 10);
    16. i--;
    17. j--;
    18. }
    19. if (carry == 1) {
    20. buffer.append(1);
    21. }
    22. return buffer.reverse().toString();
    23. }
    24. }
    1. public String addStrings(String num1, String num2) {
    2. // 思路:每一位分别叠加,结果放入字符串,最后倒叙。需要来考虑进位的问题
    3. StringBuffer res = new StringBuffer();
    4. // 定义遍历 2 个字符串的初始位置
    5. int i = num1.length() - 1;
    6. int j = num2.length() - 1;
    7. // 定义进位变量
    8. int carry = 0;
    9. // 统一进位情况:只要未遍历完或者还有进位,就补零继续
    10. while (i >= 0 || j >= 0 || carry != 0) {
    11. // 取两数当前的对应数位,但是取出来可能不是数字,也就是没有数字了,要补零站位
    12. // 字符要将 ASCII 码转为数字
    13. int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
    14. int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
    15. // 对当前数位求和
    16. int sum = n1 + n2 + carry;
    17. res.append(sum % 10);
    18. carry = sum / 10;
    19. // 移动指针,遍历下一位
    20. i--;
    21. j--;
    22. }
    23. return res.reverse().toString();
    24. }