给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 要求: 1.num1 和num2 的长度都小于 5100. 2.num1 和num2 都只包含数字 0-9. 3.num1 和n

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

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

思路:
1.将两个字符串的每一位截取出来
2.将它们相加(分两种情况 需要进位的和不需要进位的)
3.然后拼接起来输出(从末位开始加,所以最后需要将字符串逆转后输出)

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个字符串:");
        String num1 = sc.nextLine();
        System.out.println("请输入第二个字符串:");
        String num2 = sc.nextLine();
        String str = addStrings(num1,num2);
        System.out.println("它们相加的结果为:"+str);
    }

    
    public static String addStrings(String num1, String num2) {
        int len1 = num1.length()-1 , len2 = num2.length()-1;   //用于记录需要取出数字的下标
        int temp1 = 0 , temp2 = 0;  //用于临时接收取得的数字
        int sum = 0;    //用于计算是否需要进位
        int carry = 0;  //用于保存需要进位的数字
        StringBuilder str = new StringBuilder();    //用来拼接字符串

        while( len1>=0 || len2>=0 ){  //只要没有加完就进入循环
            temp1 = len1<0 ? 0 : num1.charAt(len1--)-'0';   //-字符'0'是为了取出整数
            temp2 = len2<0 ? 0 : num2.charAt(len2--)-'0';
            sum = carry + temp1 + temp2;    //取出来的两个整数和进位后的数相加
            str.append(sum%10);     //取出各位数字
            carry = sum/10;         //取出进位的数字
        }
        if(carry == 1){
            str.append("1");
        }
        return str.reverse().toString();
    }
}

你可能感兴趣的:(经典面试题型)