PAT B1074 宇宙无敌加法器(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1074 宇宙无敌加法器

解题思路

将数字存储为字符串,逆转并添 ‘0’ 对齐长度,然后根据进制相加,存储每一位的结果,最后逆转输出。

易错点

  • 输出的结果中不应有前导零
  • 0 应当正确输出

也许陌生的知识点

  • reverse(ans.begin(), ans.end())
    • 字符串逆转
    • 需要头文件:algorithm
  • s.erase(ans.begin());
    • 删除字符串第一个字符
    • 所需头文件: string

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
string D[3], ans;
cin >> D[0] >> D[1] >> D[2];
int len = 0, r = 0;
for(int i = 0; i < 3; i++) len = max(len, (int)(D[i].length()));
for(int i = 0; i < 3; i++){ // 对齐
reverse(D[i].begin(), D[i].end());
while(D[i].length() < len) D[i] += "0";
}
for(int i = 0; i < len; i++){
int a = (int)(D[1][i] - '0'), b = (int)(D[2][i] - '0'), c = (int)(D[0][i] - '0');
int d = (c == 0) ? 10 : c;
int t = (r + a + b) % d;
r = (r + a + b) / d;
ans += to_string(t);
}
ans += to_string(r);
reverse(ans.begin(), ans.end());
while(ans.length() > 1 && ans[0] == '0') ans.erase(ans.begin());
cout << ans;
return 0;
}