问题描述

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-strings

解答

class Solution {
    public void jinwei(StringBuilder s1, int offset, int num){
        if(offset < s1.length()){
            int temp = (int)s1.charAt(offset)-'0'+num;
            if(temp>=10){
                s1.setCharAt(offset,(char)(temp%10+48));
                jinwei(s1, offset+1, (int)(temp/10));
            }
            else s1.setCharAt(offset, (char)(temp+48));
        }else s1.append(num);
    }
    public String addStrings(String num1, String num2) {
        int len_num1 = num1.length();
        int len_num2 = num2.length();
        //保证num1比num2长
        if(len_num1 < len_num2){
            String result = addStrings(num2, num1);
            return result;
        }
        StringBuilder s1 = new StringBuilder(num1);
        StringBuilder s2 = new StringBuilder(num2);
        s1.reverse();
        s2.reverse();
        //结果保存到长的String里面,也就是num1
        for(int i=0;i<len_num2;i++){
            int temp = (int)s1.charAt(i)-'0'+(int)s2.charAt(i)-'0';
            if(temp>=10){
                s1.setCharAt(i,(char)(temp%10+48));
                jinwei(s1, i+1, (int)(temp/10));
            }
            else s1.setCharAt(i,(char)(temp+48));
        }
        return s1.reverse().toString();
    }
}