[字符串]BM86 大数加法-简单
描述
示例1
输入:
"1","99"
返回值:
"1","99"
题解
思路:
-
获取s和t的最大长度len,遍历s和t,直到遍历完较长的字符串
-
将s和t的反向索引对应数值相加,并设置进位标记,将相加结果去除进位后放入新的字符串作为结果返回
-
将结果翻转,并返回
说明: -
可以事先分配好res的长度,避免多次内存分配,提高效率
-
官方题解在s原地的解法可以作为参考,有2个优点:
可能不需要额外分配内存,因为最高位可能不需要再次进位
不需要翻转字符串
// https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=295&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295 #include <bits/stdc++.h> using namespace std; string solve(string s, string t) { int i = 0; int max_len = std::max(s.size(), t.size()); int carray = 0; std::string res; while (i < max_len) { if (i < t.size() && i < s.size()) { int k = (t[t.size() - i - 1] - '0') + (s[s.size() - i - 1] - '0') + carray; carray = k / 10; res.append(1, '0' + k % 10); } else if (i < t.size()) { int k = (t[t.size() - i - 1] - '0') + carray; carray = k / 10; res.append(1, '0' + k % 10); } else if (i < s.size()) { int k = (s[s.size() - i - 1] - '0') + carray; carray = k / 10; res.append(1, '0' + k % 10); } i++; } if (carray != 0) { res.append(1, '0' + carray); } std::reverse(res.begin(), res.end()); return res; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)