文章

266

粉丝

20

获赞

533

访问

136.5k

头像
身份证校验 题解:
P1722 北京理工大学机试题
发布于2026年2月27日 16:53
阅读数 31

#include <iostream>

#include<cstring>
using namespace std;

int main()
{
    char id[19];  // 存储身份证号,19是为了容纳18位字符+结束符'\0'
    
    // 前17位的加权因子(国家标准GB 11643-1999规定)
    // 每一位数字需要乘以对应的权重,然后求和
    int weight[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    
    // 校验码对照表(余数0-10分别对应的校验字符)
    // 余数0 → '1', 余数1 → '0', 余数2 → 'X', 余数3 → '9', ... 余数10 → '2'
    char check[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
    
    // 循环读取每一行输入,直到文件结束
    while (scanf("%s", id) != EOF) {

// 检查长度
        if (strlen(id) != 18) {
            printf("ID Wrong (length error)\n");
            continue;
        }
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发