代码改变世界

身份证号码升级

2016-12-13 19:38  HHFFZ  阅读(728)  评论(0编辑  收藏  举报
问题描述
  从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位字符串是否合理

 

 

这个题很容易  就是恶心

考查一些  字符串  ACIIL码。注意变换

#include<stdio.h>
#include<string.h>
int main()
{
    int i,n,j,m,k;
    long long int s;
  char a[100];
  char b[100];
  gets(a);
  n=strlen(a);
  for(i=0;i<6;i++)
  {
      b[i]=a[i];//前六个存进B数组里
  }
  b[6]='1';
  b[7]='9';加入俩
for(i=6;i<n;i++)
{
    b[i+2]=a[i];
}
for(i=0;i<n+2;i++)
{
    printf("%c",b[i]);
}

s=(b[0]-48)*7+(b[1]-48)*9+(b[2]-48)*10+(b[3]-48)*5+(b[4]-48)*8+(b[5]-48)*4+(b[6]-48)*2+(b[7]-48)*1+(b[8]-48)*6+(b[9]-48)*3+(b[10]-48)*7+(b[11]-48)*9+(b[12]-48)*10+(b[13]-48)*5+(b[14]-48)*8+(b[15]-48)*4+(b[16]-48)*2;
s=s%11;///乘上系数
if(s==0)
printf("1");
if(s==1)
    printf("0");
if(s==2)
    printf("x");
if(s==3)
printf("9");
if(s==4)
    printf("8");
if(s==5)
    printf("7");
if(s==6)
    printf("6");
    if(s==7)
    printf("5");
    if(s==8)
        printf("4");
    if(s==9)
        printf("3");
    if(s==10)
        printf("2");

    getchar();getchar();getchar();
    return 0;
}