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

相关推荐

07-02 10:44
门头沟学院 C++
码农索隆:太实诚了,告诉hr,你能实习至少6个月
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务