PAT B1031 查验身份证(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1031 查验身份证

解题思路

简单的字符串处理。

也许陌生的知识点

  • isdigit()
    • 判断字符是否为数字
    • 所需头文件 cctype

代码示例:

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 <cctype>
using namespace std;
int main(){
int N, Z = 0, cnt = 0, weight[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char M[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
cin >> N;
for(int i = 0; i < N; i++, Z = 0){
string id;
bool valid = true;
cin >> id;
for(int j = 0; valid && j < id.length() - 1; j++){
if(isdigit(id[j]) == false) valid = false;
if(valid) Z = Z + weight[j] * (int)(id[j] - '0');
}
Z = Z % 11;
if(id[17] != M[Z]) valid = false;
if(valid == false){
cnt++;
cout << id <<endl;
}
}
if(cnt == 0) cout << "All passed" << endl;
return 0;
}