小学生都能懂的题解 | #大数加法#

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

方案解释

  1. 目标:我们要计算两个用字符串表示的数字的和,并把结果也以字符串的形式返回。

  2. 输入:两个字符串,比如 "1""99"

  3. 输出:它们的和,比如返回 "100"

代码解释

public class StringSum {

这里我们定义了一个叫 StringSum 的类,所有的代码都在这个类里面。

public static String addStrings(String num1, String num2) {

这是一个叫 addStrings 的方法,它接受两个字符串(即两个数字),并返回它们的和,类型也是字符串。

StringBuilder result = new StringBuilder();
int carry = 0;

我们创建一个 StringBuilder 对象 result 来存储结果。同时定义一个变量 carry 来存储进位(如果加的结果超过了10,就要记住进位)。

int i = num1.length() - 1;
int j = num2.length() - 1;

这两行代码用来设置两个指针 ij,分别指向两个字符串的最后一个字符。

while (i >= 0 || j >= 0 || carry > 0) {

这个循环会一直执行,直到两个字符串都加完,且没有进位为止。

int sum = carry;

每次循环开始时,我们把进位加到 sum 变量里。

if (i >= 0) {
    sum += num1.charAt(i) - '0'; // 将字符转换为数字
    i--;
}
if (j >= 0) {
    sum += num2.charAt(j) - '0'; // 将字符转换为数字
    j--;
}

如果 ij 还在有效范围内,我们就从对应的字符串中取出字符,把它转换成数字(减去字符 '0'),然后加到 sum 里。接着,指针向前移动。

result.append(sum % 10); // 取个位
carry = sum / 10; // 计算进位

然后,我们把 sum 的个位数(sum % 10)添加到结果中,并计算新的进位(sum / 10)。

return result.reverse().toString(); // 反转结果并返回

最后,结果是从后往前加的,所以我们需要把结果反转,然后转换成字符串返回。

运行示例

main 方法中,我们测试了两个例子:

  • 输入 "1""99",返回 "100"
  • 输入 "114514""",返回 "114514"

完整代码

public class StringSum {
    public static String addStrings(String num1, String num2) {
        StringBuilder result = new StringBuilder();
        int carry = 0;
        
        int i = num1.length() - 1;
        int j = num2.length() - 1;

        while (i >= 0 || j >= 0 || carry > 0) {
            int sum = carry;

            if (i >= 0) {
                sum += num1.charAt(i) - '0'; // 将字符转换为数字
                i--;
            }
            if (j >= 0) {
                sum += num2.charAt(j) - '0'; // 将字符转换为数字
                j--;
            }

            result.append(sum % 10); // 取个位
            carry = sum / 10; // 计算进位
        }

        return result.reverse().toString(); // 反转结果并返回
    }


}

希望这篇文章对你有帮助👍。

#题解#
小学生都能看懂的算法 文章被收录于专栏

主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。

全部评论

相关推荐

03-01 21:45
中北大学 golang
孤蓝长空:请你说一下为什么你用websocket而不是http,请你说一下什么是rpc,为什么用rpc,你的rpc的传输协议是JSON,xml还是什么 请你描述一下你的鉴权流程(完整的) 我问的是第二个项目,随便问的哈哈哈
开工第一帖
点赞 评论 收藏
分享
03-26 08:58
已编辑
门头沟学院 Java
ttl: 3.19一面晚上过3.20二面3.23oc3.25offerbase:末9有一段中小厂实习一面面经:(总体时长一个小时二十分钟左右没什么八股,主要都是问项目和场景题1.实习(问了有四十分钟,感觉面试官很看重实习这一块,一直在拷打,问到后面我都要疯了,好在准备得比较充分1️⃣用的是什么中间件,有参与技术选型吗,实习的项目里为什么选这个RabbitMQ而不是kafka,为什么不用RocketMQ,为什么放弃异步,自己的项目里面使用的是kafka,那你觉得项目和实习的中间件选型有差异的原因是什么,他们之间的区别在哪里,底层的原因知道吗(高柱到这里已经快疯了,但是硬着头皮答完了,主要是从一致性吞吐量和框架的契合度答,面试官说答得挺好的,应该是没什么问题,这一块就问了快半个小时,到这里我已经快疯了2️⃣项目怎么对接上下游3️⃣介绍项目的难点重点4️⃣微服务(高柱实习是单体项目没涉及这一块5️⃣Redis的使用2.项目:1️⃣智能客服是怎么应用在项目里的(langchain4j➕rag➕functioncalling)2️⃣RAG了解多少3️⃣文本向量化的难点是什么,了解哪些大模型的知识(我一点不懂,纯瞎扯,但貌似扯对了4️⃣对ai的态度是什么,aicoding相关5️⃣怎么保证多节点下Caffeine缓存里面数据都是一致的(答的是短ttl,面试官不是很满意,但是我确实不太懂这个怎么保证,后来查了还是不懂怎么保证6️⃣Redis的使用,和你的实习项目的使用有区别吗,还有一些引申问题3.八股(含量不高,就是走个过场1️⃣进程的内存布局2️⃣Redis三剑客3️⃣微服务相关知识(高柱已经忘得差不多了…勉强答上来4️⃣JVM5️⃣线程状态6️⃣线程安全,在你的实习项目里怎么保证线程安全的(又绕回来了4.智商题找异常球5.手撕:1️⃣五道sql,不难2️⃣力扣不重叠的滑动窗口数组,贪心➕双指针秒了强度拉满了这个一面,高柱到后面人都是傻的二面面经:(就半个小时实习拷打,简历上写了几点就问了几点,问完就结束了,无手撕
查看19道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4278次浏览 75人参与
# AI面会问哪些问题? #
27722次浏览 552人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15197次浏览 221人参与
# 你的实习产出是真实的还是包装的? #
20136次浏览 342人参与
# 找AI工作可以去哪些公司? #
9058次浏览 233人参与
# 春招至今,你的战绩如何? #
65065次浏览 580人参与
# 厦门银行科技岗值不值得投 #
8007次浏览 188人参与
# 从事AI岗需要掌握哪些技术栈? #
8891次浏览 304人参与
# 中国电信笔试 #
31989次浏览 292人参与
# 你做过最难的笔试是哪家公司 #
33385次浏览 231人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340781次浏览 2174人参与
# 阿里笔试 #
178513次浏览 1315人参与
# 哪些公司真双非友好? #
69573次浏览 289人参与
# 机械人避雷的岗位/公司 #
62703次浏览 393人参与
# 第一份工作一定要去大厂吗 #
14543次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22072次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26246次浏览 310人参与
# 沪漂/北漂你觉得哪个更苦? #
9812次浏览 193人参与
# 应届生第一份工资要多少合适 #
20680次浏览 86人参与
# HR最不可信的一句话是__ #
6208次浏览 114人参与
# AI时代,哪个岗位还有“活路” #
11489次浏览 341人参与
# 春招你拿到offer了吗 #
831177次浏览 9987人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务