题解 | #高精度整数加法#

高精度整数加法

http://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6

题解

举例: s1=1234567、s2=789

1 2 3 4 5 6 7
0 0 0 0 7 8 9

1.将短串s2左侧添加0。

2.for循环从右到左(低位到高位)相加。

3.输出相加的结果。

知识点:字符串相加 需要转为10进制进行相加,也就是char1 - '0' = 实际十进制数。

代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s1 = sc.next();
            String s2 = sc.next();

            // 确保s1 的长度最长
            if (s2.length() > s1.length()) {
                String temp = s1;
                s1 = s2;
                s2 = temp;
            }

            // 将s2左边用0来填充,长度为最长s1的长度
            // 1123456
            // 0000123
            s2 = s1.replaceAll("[0-9]", "0").substring(0, s1.length() - s2.length()) + s2;

            int move = 0; // 表示进位 加法 最大进1 所以 move 的取值  0,1
            StringBuilder sb = new StringBuilder();
            for (int i = s1.length() - 1; i >= 0; i--) {
                char c1 = s1.charAt(i);
                char c2 = s2.charAt(i);
                int sum = (int)(c1 - '0' + c2 - '0') + move;
                char ch = '0'; // 当前位置的字符
                if (sum >= 10) {
                    move = 1; // 大于10,进一
                    ch = (char)(sum % 10 + '0'); // 取各位作为当前值
                } else {
                    move = 0;
                    ch = (char)(sum + '0'); // 取当前和作为当前值
                }

                if (i == 0 && sum > 10) {
                    sb.append(ch).append('1'); // 进1位
                } else {
                    sb.append(ch);
                }
            }
            System.out.println(sb.reverse());
        }
    }
}
全部评论

相关推荐

1 2 评论
分享
牛客网
牛客企业服务