HJ57 高精度整数加法

题目:

HJ57 高精度整数加法

题解:

1.逐位相加

按照传统加减法模式,从最后一位开始,逐位相加,逢十进一,传统方式从右往左相加,可以将数字翻转,变成从左往右按照数组遍历顺序相加,最后再将结果翻转。

java 复制代码
    public String getSum(String str1, String str2) {
        // 翻转
        List<Integer> list1 = revers(str1);
        List<Integer> list2 = revers(str2);

        int len1 = list1.size();
        int len2 = list2.size();

        int carryBit = 0;
        StringBuilder sb = new StringBuilder();
        int length = len1 > len2 ? len1 : len2;
        for (int i = 0; i < length; i++) {
            // 如果超出则取0
            int value1 = getValue(list1, i);
            int value2 = getValue(list2, i);
            int sum = value1 + value2 + carryBit;
            if (sum < 10) {
                sb.append(sum);
                carryBit = 0;
            } else {
                sb.append(sum % 10);
                carryBit = sum/10;
            }
        }

        // 如果最后还有进位,需要添加进位
        if (carryBit != 0) {
            sb.append(carryBit);
        }

        // 翻转结果
        sb.reverse();
        return sb.toString();
    }

    private int getValue(List<Integer> list, int index) {
        if (index >= list.size()) {
            return 0;
        }

        return list.get(index);
    }

    private List<Integer> revers(String str) {
        char[] chars = str.toCharArray();
        List<Integer> list = new ArrayList<>(chars.length);

        for (int i = chars.length - 1; i >= 0; i--) {
            list.add(chars[i] - '0');
        }

        return list;
    }

时间复杂度:O(n+m)

2.利用大整形类型BigInteger实现

java 复制代码
    public String getSum(String str1, String str2) {
        BigInteger bigInteger1 = new BigInteger(str1);
        BigInteger bigInteger2 = new BigInteger(str2);

        bigInteger1 = bigInteger1.add(bigInteger2);
        return bigInteger1.toString();
    }
相关推荐
Old Uncle Tom1 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆1 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
生信碱移1 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业1 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
智者知已应修善业4 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机
.5484 小时前
## Sorting(排序算法)
python·算法·排序算法
wuweijianlove5 小时前
算法的平均复杂度建模与性能回归分析的技术7
算法·数据挖掘·回归
子琦啊5 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
code_pgf6 小时前
Octo 算法详解-开源通用机器人策略模型技术报告
算法·机器人·开源
嘻嘻哈哈樱桃6 小时前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划