天梯模拟赛 L1 - 03 宇宙无敌加法器 【模拟加法】
2018-03-26 19:33
92 查看
L1-3 宇宙无敌加法器(20 分) 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20 位就够用了,以后各位默认为 10 进制。 在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203 + 415”呢?我们得首先计算最低位:3 + 5 = 8;因为最低位是 7 进制的,所以我们得到 1 和 1 个进位。第 2 位是:0 + 1 + 1(进位)= 2;因为此位是 2 进制的,所以我们得到 0 和 1 个进位。第 3 位是:2 + 4 + 1(进位)= 7;因为此位是 5 进制的,所以我们得到 2 和 1 个进位。第 4 位是:6 + 1(进位)= 7;因为此位是 10 进制的,所以我们就得到 7。最后我们得到:6203 + 415 = 7201
题意如上.
思路: 其实写过高精度的人都会觉得很简单, 因为就是模拟个加法, 带进位嘛, 所以按照题意模拟就好了.
唯一的坑点就是它的输入自带前导零, 所以你需要在最后的答案去前导零, 但是又有可能结果就是0, 所以我们需要特判下这种情况即可.
AC Code
void solve() { string s, a, b; cin >> s >> a >> b; string ans = ""; int lena = sz(a), lenb = sz(b); int k = max(lena, lenb); int jin = 0; int i, j; for (i = lena-1, j = lenb-1 ; i >= 0 && j >= 0 ; i --, j--) { int tmp = (a[i]-'0') + (b[j]-'0') + jin; int zz = (s[--k] - '0') == 0 ? 10 : (s[k]-'0'); int pp = tmp % zz; ans.pb(pp+'0'); jin = tmp / zz; } if (lena > lenb) { for (int t = i ; t >= 0 ; t --) { int tmp = (a[t] -'0') + jin; int zz = (s[--k] - '0') == 0 ? 10 : (s[k]-'0'); int pp = tmp % zz; ans.pb(pp+'0'); jin = tmp / zz; } } else { for (int t = j ; t >= 0 ; t --) { int tmp = (b[t]-'0') + jin; int zz = (s[--k] - '0') == 0 ? 10 : (s[k]-'0'); int pp = tmp % zz; ans.pb(pp+'0'); jin = tmp / zz; } } if (jin) { ans.pb(jin+'0'); } reverse(ans.begin(), ans.end()); string res = ""; int flag = -1; for (int i = 0 ; i < sz(ans) ; i ++) { if (ans[i] != '0') { res = ans.substr(i, sz(ans)-i); flag = i; break; } } if (flag == -1) printf("0\n"); else cout << res << endl; }
相关文章推荐
- L1-3 宇宙无敌加法器(20 分)
- L1-3 宇宙无敌加法器(20 分)
- 天梯赛2018模拟 宇宙无敌加法器
- L1-3 宇宙无敌加法器(20 分)
- L1-3 宇宙无敌加法器(20 分)(部分正确 12分)
- (模拟)宇宙无敌加法器
- L1-3 宇宙无敌加法器(20 分)
- PAT乙级1074【宇宙无敌加法器】 进制加法 reverse
- L1-3 宇宙无敌加法器(大数相加类)
- 1074. 宇宙无敌加法器(20)
- 1074. 宇宙无敌加法器(20)
- 1074. 宇宙无敌加法器(20)
- 1074. 宇宙无敌加法器(20)
- PAT basic-level 1074 宇宙无敌加法器 笔记
- PAT 1074. 宇宙无敌加法器
- PAT 1074 宇宙无敌加法器 (20 分)
- PAT (Basic Level) Practise (中文)1074. 宇宙无敌加法器(20)
- 1074. 宇宙无敌加法器(20)
- 1074. 宇宙无敌加法器(20)
- 1074. 宇宙无敌加法器(20)