• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
xiaoyaovo
博客园    首页    新随笔    联系   管理    订阅  订阅
高精度整数加法(java)

题目

  • 牛客链接:高精度整数加法
  • 题目描述

输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过10000。
本题含有多组样例输入。

  • 输入

9876543210
1234567890

  • 输出

11111111100

基本思路

题目不难,就是比较难处理。字符串类型的题目貌似都比较繁琐!

  1. 找出最长的字符串 num;
  2. 将输入的两个字符串字符串 num1 和 num2 的数组逐个添加到数组后续进行相加;
  3. 处理最长的字符串在没有遍历玩的情况下;
  4. 处理溢出的数字;
  5. 遍历输出。

代码展示

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String num1 = scanner.next();
            String num2 = scanner.next();

            // 1. 找出最长的字符串
            if (num1.length() < num2.length()) {
                String tmp = num1;
                num1 = num2;
                num2 = tmp;
            }
            int len1 = num1.length();
            int len2 = num2.length();
            int len = len1+1;
            int[] nums1 = new int[len1];
            int[] nums2 = new int[len2];
            int[] nums = new int[len];

            // 2. 将字符串添加到数组
            for (int i = 0; i < len1; i++) {
                nums1[i] = num1.charAt(i) - '0';
            }
            for (int i = 0; i < len2; i++) {
                nums2[i] = num2.charAt(i) - '0';
            }
            int i = len1-1;
            int j = len2-1;
            int k = len-1;
            int add = 0;

            // 相加
            while (i >= 0 && j >= 0) {
                if (nums1[i] + nums2[j] + add > 9) {
                    nums[k] = (nums1[i] + nums2[j] + add) % 10;
                    add = (nums1[i] + nums2[j] + add) / 10;
                }else {
                    nums[k] = nums1[i] + nums2[j] + add;
                    add = 0;
                }
                i--;
                j--;
                k--;
            }

            // 3. 处理最长的字符串
            while (i >= 0) {
                if (nums1[i] + add > 9) {
                    nums[k] = (nums1[i] + add) % 10;
                    add = (nums1[i] + add) / 10;
                }else {
                    nums[k] = nums1[i] + add;
                    add = 0;
                }
                i--;
                k--;
            }

            // 4. 处理溢出
            if (add != 0) {
                nums[k] = add;
            }

            // 5. 遍历输出
            String res = "";
            int index = 0;
            if (nums[0] == 0) {
                index = 1;
            }
            for (; index < len; index++) {
                res += nums[index];
            }
            System.out.println(res);
        }
    }
posted on 2021-07-23 03:05  豆本豆红枣豆奶  阅读(16)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3