// 02.20 09:14
#include <iostream>
using namespace std;
int weight[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 }; //权重
char v[11] = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' }; // 校验码
int main() {
int n;
scanf("%d", &n); //n = 1
bool flag = true;
for (int i = 0; i < n; i++) {
int sum = 0;
char id[18];
scanf("%s", id); //
for (int j = 0; j < 17; j++) {
sum += weight[j] * (id[j] - '0'); // 7 * 1
}
sum %= 11; // 276 % 11 = 1
if (id[17] == (v[sum])) { // '0' == '0'
continue;
}
else {
printf("%s\n", id);
flag = false;
}
}
if (flag == true) {
printf("All passed");
}
return 0;
}
思路:
字符数组录入id,遍历每一位,累加,判断和校验码是否相等
注意:
sum每次都要清零!