PAT B1031 查验身份证

前言

传送门

正文

思路

详见代码注释

参考题解

#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;
} 
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务