题目描述
算法思路
使用string类读取18位身份证字符;对字符串进行遍历。
使用ASCII码与整数的对应关系, ASCII的数字字符减去‘0’即可得真正的十进制值。
c++实现
#include <bits/stdc++.h>
using namespace std;
using gg = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
string IdNum;
gg n, p[17]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
cin >> n;
bool flag = true;
while(n--){
gg sum = 0;
cin >> IdNum;
for(gg i = 0; i < 17; i++){
sum += (IdNum[i] - '0')* p[i];
}
sum %= 11;
if(!(sum + (IdNum[17] - '0')==1 || (sum==2 && IdNum[17]=='X') || sum + (IdNum[17] - '0')==12)){
flag = false;
cout << IdNum << (n==0 ? "" : "\n");
}
}
if(flag)
cout << "All passed";
return 0;
}