PAT B1048 数字加密(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1048 数字加密

解题思路

字符串处理。将两个字符串逆转,并在尾部填充 ‘0’,使位数一致,以便确定偶数位和奇数位。

易错点

  • 当两个数长度不统一时,缺少的位默认为 0,然后同样按照规则求。因此需要先

也许陌生的知识点

  • reverse(num, num + N);
    • 对数组 [first, last) 范围内的元素逆转
    • 需要头文件:algorithm
  • A += '0';
    • 字符串拼接,补 0
    • 需要的头文件: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 <string>
#include <algorithm>
using namespace std;
int main(){
string A, B;
char C[] = {'J', 'Q', 'K'};
cin >> A >> B;
reverse(A.begin(), A.end());
reverse(B.begin(), B.end());
while(A.length() < B.length()) A += '0'; //长度统一
while(B.length() < A.length()) B += '0';
for(int i = 0, x; i < A.length() && i < B.length(); i++){
if((i + 1) % 2 == 0){ // 偶数
x = (int)(B[i] - A[i]);
if(x < 0) x += 10;
}else{ // 奇数
x = (int)(A[i] - '0' + B[i] - '0') % 13;
}
if(x < 10) B[i] = (char)(x + '0');
else B[i] = C[x - 10];
}
reverse(B.begin(), B.end());
cout << B << endl;
return 0;
}