1031 查验身份证
注意点:
一,加权求和表示,每一位乘以该位的权值最后求和,只对前17位加权求和。
新学一招,整型到字符的hash。
string hashtable = "10X98765432";
#include<iostream> #include<cctype> using namespace std; string hashtable = "10X98765432"; int weight[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int main() { int n,cnt = 0; cin>>n; string str; for(int i = 0; i < n; ++i) { cin>>str; bool flag = true; int sum = 0; for(int i = 0; i < str.size()-1; ++i)//检查前17位是否全是数字 if(!isdigit(str[i])) { flag = false; break; } else sum += (str[i]-'0')*weight[i]; if(flag == false || hashtable[sum%11] != str[17])//前17位存在非数字或者最后一个检验位不正确 cout<<str<<endl; else cnt++;//有效数据加一 } if(cnt == n) cout<<"All passed"; return 0; }