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

SUNCHAOYI
报名个人赛 https://www.luogu.com.cn/contest/44296搬运于
2025-08-24 22:18:34,当前版本为作者最后更新于2020-03-14 11:04:08,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这道题其实跟高精度的模拟类似,但是唯一不同的是逢七进一,且每位上的数字是。那么如何进行模拟呢?首先需要知道这道题的进位特点。
$\color{white}-\color{black}12\color{white}-------\color{black}75$
$\color{black}+13\color{white}------\color{black}+73$
$\color{white}-\color{black}25\color{white}-------\color{black}258$$\color{black}\textbf{不进位}\color{white}-----\color{black}\textbf{进位}$
知道这一点后,我们就可以开始模拟。为了方便,我们把个位放在前面。又因为数据比较大,所以我们采用字符串式处理。for(int j = 0;j < now;j++) num[now - 1 - j] = a[i][j] - '0';//加数 for(int j = 0;j <= max(wei,now);j++) { if(i == 1) k = 0;//第一个加数自己不用进位处理 ans[j] += k + num[j];//加法 k = ans[j] / 7;//进位 ans[j] %= 10;//每一位在0-9之间 }我们可以发现,在两数相加之后,还有可能不停进位,产生新的一个数位,所以我们要判断是否还存在进位数字。
while(k != 0)//还需进位 { //继续模拟加法 ans[++now] += k + num[now]; k = ans[now] / 7; ans[now] %= 10; } wei = max(wei,now);//保存最大长度最后就是输出了,把前导的去掉是关键!直接我们做加法的时候是个位在前面,所以输出的时候要记得在调转回来。
while(ans[wei] == 0) wei--;//去除前导零 if(wei < 0) cout<<0<<endl;//等于0的情况特判 else { for(int i = wei;i >= 0;i--) cout<<ans[i];//正常输出 cout<<endl; }
贴一下完整代码:
#include <iostream> #include <string> #include <cstring> using namespace std; string a[2025]; int ans[2025],num[2025]; int main() { int n,k = 0,wei = 0; cin>>n; for(int i = 1;i <= n;i++) cin>>a[i]; for(int i = 1;i <= n;i++) { k = 0; memset(num,0,sizeof(num));//初始化 int now = a[i].size();//当前加数的长度 for(int j = 0;j < now;j++) num[now - 1 - j] = a[i][j] - '0';//加数 for(int j = 0;j <= max(wei,now);j++) { if(i == 1) k = 0;//第一个加数自己不用进位处理 ans[j] += k + num[j];//加法 k = ans[j] / 7;//进位 ans[j] %= 10;//每一位在0-9之间 } now = max(wei,now); while(k != 0)//还需进位 { //继续模拟加法 ans[++now] += k + num[now]; k = ans[now] / 7; ans[now] %= 10; } wei = max(wei,now);//保存最大长度 } while(ans[wei] == 0) wei--;//去除前导零 if(wei < 0) cout<<0<<endl;//等于0的情况特判 else { for(int i = wei;i >= 0;i--) cout<<ans[i];//正常输出 cout<<endl; } return 0; }
- 1
信息
- ID
- 4586
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者