1 条题解
-
0
自动搬运
来自洛谷,原作者为

yingxi
没咋 || 最后在线时间:2025年8月21日10时55分搬运于
2025-08-24 21:26:57,当前版本为作者最后更新于2025-07-21 10:21:10,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目传送门
看到 A+B Problem,大家是不是十分开心?但是他和这道题不同,仔细看,题目名称后面有一个“高精”,而 和 的范围竟然来到了 !要知道,
long long在这道题里,只能通过 的数据,那我们用什么来存 和 呢?这就引入了我们的主题:高精度! 和 我们可以拿字符串存储,然后一位一位的模拟加法。当然,要将字符转数字,需要将其
-'0', 例如这样:char c; cin >> c; cout << c - '0';这样就可以以数字的形式输出对应的字符啦。
在处理之前,记得补前导零哦。就把两个字符串长度的较大值用一个变量存起来,比如
len,然后去看每个字符串的长度是否小于它,如果小于,说明要补前导零。int len = max(a.size(), b.size()); while (a.size() < len) a = '0' + a; while (b.size() < len) b = '0' + b;补完前导零后,从低到高依次模拟计算过程。在这之中,要用一个变量存储上一位进的位,例如
jw。每一次做加法的时候,不仅要那当前这一位的两个数字,还要加上进位。int jw = 0; for (int i = len - 1; i >= 0; i--) { int t1 = a[i] - '0', t2 = b[i] - '0'; int t = t1 + t2 + jw; jw = t / 10; t %= 10; char ch = t + '0'; c = ch + c; }处理完之后,如果还有进位,就把前面直接加上一个 ,因为加法进位最多进 。然后返回答案就可以了。
if (jw != 0) return '1' + c; return c;好的这就是高精加啦,下面是完整代码:
#include<bits/stdc++.h> #define int long long using namespace std; string add(string a, string b) { int len = max(a.size(), b.size()), jw = 0; string c = ""; while (a.size() < len) a = '0' + a; while (b.size() < len) b = '0' + b; for (int i = len - 1; i >= 0; i--) { int t1 = a[i] - '0', t2 = b[i] - '0'; int t = t1 + t2 + jw; jw = t / 10; t %= 10; char ch = t + '0'; c = ch + c; } if (jw != 0) return '1' + c; return c; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s1, s2; cin >> s1 >> s2; cout << add(s1, s2); return 0; }
- 1
信息
- ID
- 594
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者