文章

34

粉丝

0

获赞

333

访问

6.0k

头像
身份证校验 题解:
P1722 北京理工大学机试题
发布于2026年3月3日 20:32
阅读数 710

#include <bits/stdc++.h>
using namespace std;

int main(){
    char snum[20];
    while(scanf("%s",snum)==1){
    if(strlen(snum)!=18){
        printf("ID Wrong\n");
        continue;
    }
    int num[18];
    for(int i=0;i<17;i++){
        if(snum[i]<'0'||snum[i]>'9'){
            printf("ID Wrong\n");
            continue;
        }
        num[i]=snum[i]-'0';
    }
    if(snum[17]>='0'&&snum[17]<='9') num[17]=snum[17]-'0';
        else if(snum[17]=='x'||snum[17]=='X') num[17]=10;
            else {printf("ID Wrong\n"); continue;}
    //权值
    int heavy[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    int sum=0;
    for(int i=0;i<17;i++)
        sum+=num[i]*heavy[i];
    int cor=sum%11;
    int xiaoyan[]={1,0,10,9,8,7,6,5,4,3,2};
    if(xiaoyan[cor]==num[17]) printf("ID Corrent\n");
        else printf("ID Wrong\n");}
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发