实践周5

#include <iostream>
#include <string>
using namespace std;
int main() 
{
    int n, i, sum = 0, cnt = 0;
    string s;
    int w[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
    char z[11] = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
    cin >> n;
    getchar();
    for (int j = 0; j < n; j++) 
    {
        sum = 0;
        getline(cin, s);
        for (i = 0; i < 17 && s[i] >= '0' && s[i] <= '9'; i++) 
        {
            sum += (s[i] - '0') * w[i];
        }
        if (i == 17 && z[sum % 11] == s[17])
            cnt++;
        else
            cout << s << endl;
    }
    if (cnt == n)
        cout << "All passed" << endl;
    return 0;
}

查验身份证,以前也做过这题,但是做起来很复杂,最后也WA,是上课讲解才勉强做完。

这次做起来,不仅代码量变得很少,而且做起来觉得很简单。基本上就是两个对应数组,然后算一下字符距离。

posted on 2021-07-14 17:32  _车仔  阅读(24)  评论(0编辑  收藏  举报

导航