• 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:


    // test4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //

    #include "pch.h"
    #include <iostream>
    #include <cmath>
    using namespace std;

    int quanz[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
    char s_fz[100][18];


    int tran(char a)
    {
    int k;
    for (int i = 0; i <= 10; i++)
    {
    if (a == '0' + i)
    {
    k = i; return k;
    }
    if (a == 'X')
    {
    k = 10; return k;
    }
    }

    }

    int g, j, k;

    int main()
    {
    k = 0;
    cin >> g;
    for (int i = 0; i < g; i++)
    {
    j = 0;
    do
    {
    cin >> s_fz[i][j];
    j++;

    } while (j != 18);
    }
    int cl;
    int c[100][18];
    for (int j = 0; j < g; j++)
    {
    int k = 0;
    for (int i = 0; i <= 17; i++)
    {
    cl = tran(s_fz[j][i]);
    c[j][k] = cl;
    k++;
    }
    }
    int sum[100];
    int Sum=0;
    int k5 = 0;
    for (int j = 0; j < g; j++)
    {
    for (int i = 0; i <= 16; i++)
    {
    Sum = Sum + c[j][i] * quanz[i];
    }sum[k5] = Sum; k5++;
    }
    int mo[100];

    int j1=0;
    for (int i = 0; i < g; i++)
    {
    mo[i] = sum[i] % 11;
    if (mo[i] == c[i][17]) { j1++; }
    else
    {
    for (int j = 0; j < 18; j++)
    {
    cout << s_fz[i][j];
    }
    }

    }
    if (j1 == g)
    {
    cout << "All passed";
    }

    }

    全是BUG,无力吐槽

  • 相关阅读:
    初识Redis
    一次kafka的offset回退事件及相关知识点
    接口透传
    看懂Oracle执行计划
    Oracle中merge into的使用
    动态规划算法:0/1背包问题 (0/1 Knapsack Problem)
    动态规划算法:硬币找零(Minimum Coin Change)
    链表:按照左右半区的方式重新组合单链表
    链表:删除链表中倒数第K个节点
    链表:合并两个有序链表
  • 原文地址:https://www.cnblogs.com/likeghee/p/9926672.html
Copyright © 2020-2023  润新知