专栏文章
题解:P1601 A+B Problem(高精)
P1601题解参与者 54已保存评论 75
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 75 条
- 当前快照
- 1 份
- 快照标识符
- @miotedyv
- 此快照首次捕获于
- 2025/12/03 00:51 3 个月前
- 此快照最后确认于
- 2025/12/03 00:51 3 个月前
题目传送门
看到 A+B Problem,大家是不是十分开心?但是他和这道题不同,仔细看,题目名称后面有一个“高精”,而 和 的范围竟然来到了 !要知道,
long long 在这道题里,只能通过 的数据,那我们用什么来存 和 呢?这就引入了我们的主题:高精度! 和 我们可以拿字符串存储,然后一位一位的模拟加法。当然,要将字符转数字,需要将其
CPP-'0', 例如这样:char c;
cin >> c;
cout << c - '0';
这样就可以以数字的形式输出对应的字符啦。
在处理之前,记得补前导零哦。就把两个字符串长度的较大值用一个变量存起来,比如
CPPlen,然后去看每个字符串的长度是否小于它,如果小于,说明要补前导零。int len = max(a.size(), b.size());
while (a.size() < len) a = '0' + a;
while (b.size() < len) b = '0' + b;
补完前导零后,从低到高依次模拟计算过程。在这之中,要用一个变量存储上一位进的位,例如
CPPjw。每一次做加法的时候,不仅要那当前这一位的两个数字,还要加上进位。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;
}
处理完之后,如果还有进位,就把前面直接加上一个 ,因为加法进位最多进 。然后返回答案就可以了。
CPPif (jw != 0) return '1' + c;
return c;
好的这就是高精加啦,下面是完整代码:
CPP#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;
}
相关推荐
评论
共 75 条评论,欢迎与作者交流。
正在加载评论...