- 题目描述
- 算法思路
- c++实现
- 运行结果
使用string类读取18位身份证字符;对字符串进行遍历。
使用ASCII码与整数的对应关系, ASCII的数字字符减去‘0’即可得真正的十进制值。
#include运行结果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; }



