实践周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,是上课讲解才勉强做完。
这次做起来,不仅代码量变得很少,而且做起来觉得很简单。基本上就是两个对应数组,然后算一下字符距离。