前言
正文
思路
詳見代碼註釋
參考題解
#include<iostream>
#include<string>
using namespace std;
/*
先用一個字符串數組存放所輸入的字符串,然後對每個字符串中進行遍歷,
注意需要注意檢查前17位是否全爲數字,並且最後一位校驗碼是否正確
*/
int main(){
int n,w[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//w[i]表示第i+1位數字的權重
char map[11]={'1','0','X','9','8','7','6','5','4','3','2'};//map數組存儲映射值
bool flag=true;
string str[100];
cin>>n;
for(int i=0;i<n;i++){
cin>>str[i];
int j,sum=0;
for(j=0;j<17;j++){
if(str[i][j]<'0'||str[i][j]>'9'){//前17位含有非數字字符
break;
}
sum+=w[j]*(str[i][j]-'0');
}
if(map[sum%11]!=str[i][17]||j<17){
//含有非數字字符或者驗證碼不對
flag=false;
cout<<str[i]<<endl;
}
}
if(flag)cout<<"All passed"<<endl;
return 0;
}