思路:
看题知意,按照题目意思模拟一下即可;
代码如下,提交使用g++
#include<bits/stdc++.h>
using namespace std;
int main()
{
int weight[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char check[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int n, count=0, wSum;
string id;
cin >> n;
for(int k=1; k<=n; k++)
{
bool flag = true; //前 17 位是否是数字标记
cin >> id;
wSum = 0;
for(int i=0; i<=16; i++)//检查计算前17位
{
if(isdigit(id[i])) //当前位是数字,权值累加
{
wSum += (id[i]-'0')*weight[i];
}
else //否则这个id前17有不是数字的,标记后退出循环
{
flag = false;
break;
}
}
if(flag) //id前17位是数字,则继续检查校验位
{
wSum %= 11;
if(check[wSum]==id[17])
{
count++; //查验通过,计数器自加;
}
else
{
cout << id << endl;
}
}
else
{
cout << id <<endl;
}
}
if(count==n)
printf("All passed");
return 0;
}
【Debug过程】:全部通过的时候,All passed 没有打印出来,随即检查,在程序中是以count(查验通过)的数量是否等于n来做条件的,但是在一开始检查每个id的时候,大循环是用的while(n–),这就导致了最后n必然等于0,从而导致最后判断条件错误;【改用for循环,或者循环之前把n复制一份】