zoukankan      html  css  js  c++  java
  • C语言 · 身份证号码升级

    算法提高 身份证号码升级  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描述
      从1999年10月1日开始,公民身份证号码由15位数字增至18位。(18位身份证号码简介)。升级方法为:
      1、把15位身份证号码中的年份由2位(7,8位)改为四位。
      2、最后添加一位验证码。验证码的计算方案:
      将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。
      请编写一个程序,用户输入15位身份证号码,程序生成18位身份证号码。假设所有要升级的身份证的四位年份都是19××年
    输入格式
      一个15位的数字串,作为身份证号码
    输出格式
      一个18位的字符串,作为升级后的身份证号码
    样例输入
    110105491231002
    样例输出
    11010519491231002x
    数据规模和约定
      不用判断输入的15位字符串是否合理
     
     1 /*
     2 1、把15位身份证号码中的年份由2位(7,8位)改为四位;
     3 2、最后添加一位验证码。验证码的计算方案:
     4   将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 
     5    并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。
     6 */
     7 #include<stdio.h>
     8 int xishu[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
     9 char duiying[17]={"10x98765432"};
    10 int main(){
    11     char num1[18];
    12     int num2[18];
    13     int sum=0;
    14     scanf("%s",num1);
    15     /*将数位往后移两位*/
    16     for(int i=14;i>=6;i--){
    17         num1[i+2]=num1[i];
    18     }
    19     num1[6]='1';
    20     num1[7]='9';
    21     for(int i=0;i<17;i++){
    22         num2[i]=num1[i]-'0';
    23         sum+=num2[i]*xishu[i];
    24     }
    25     sum%=11;//除以11取余数
    26     num1[17]=duiying[sum];
    27     printf("%s",num1);
    28 //    for(int i=0;i<18;i++){
    29 //        printf("%c",num1[i]);
    30 //    }
    31 }
  • 相关阅读:
    10 种保护 Spring Boot 应用的绝佳方法
    Redis 如何分析慢查询操作?
    Spring Boot 主类及目录结构介绍
    Redis 再牛逼,也得设置密码!!
    Spring Data Redis 详解及实战一文搞定
    Spring Boot Redis Cluster 实战干货
    超详细的 Redis Cluster 官方集群搭建指南
    Redis Linux 安装运行实战全记录
    hdu 4790 Just Random (思路+分类计算+数学)
    poj 1328 Radar Installation(贪心)
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6507423.html
Copyright © 2011-2022 走看看