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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章