解题思路:

注意事项:

参考代码:


#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main(){
    char ch[15];//15位数字
    char str[18];  // 18位数字
    int len;
    gets(ch);  //输入15位数字
    int i;
    for(i=0;i<8;i++)  //先把前7,8位代入
    {
        if(i!=6&&i!=7)
        str[i]=ch[i];
        else if(i==6)
        str[i]='1';
        else if(i==7)
        str[i]='9';
     }
     for(i=6;i<15;i++)  //然后在把剩下的位数代入
     {
         str[i+2]=ch[i];
      }
     int sum=0;
    for(i=0;i<17;i++)   //进行调整对应的系数
    {
       if(i==0)
        sum=sum+(str[i]-'0')*7;
        else if(i==1)
        sum=sum+(str[i]-'0')*9;
        else if(i==2)
        sum=sum+(str[i]-'0')*10;
        else if(i==3)
        sum=sum+(str[i]-'0')*5;
        else if(i==4)
        sum=sum+(str[i]-'0')*8;
        else if(i==5)
        sum=sum+(str[i]-'0')*4;
        else if(i==6)
        sum=sum+(str[i]-'0')*2;
        else if(i==7)
        sum=sum+(str[i]-'0')*1;
        else if(i==8)
        sum=sum+(str[i]-'0')*6;
        else if(i==9)
        sum=sum+(str[i]-'0')*3;
        else if(i==10)
        sum=sum+(str[i]-'0')*7;
        else if(i==11)
        sum=sum+(str[i]-'0')*9;
        else if(i==12)
        sum=sum+(str[i]-'0')*10;
        else if(i==13)
        sum=sum+(str[i]-'0')*5;
        else if(i==14)
        sum=sum+(str[i]-'0')*8;
        else if(i==15)
        sum=sum+(str[i]-'0')*4;
        else if(i==16)
        sum=sum+(str[i]-'0')*2;
    }
    sum=sum%11;
    switch(sum) //取对应的数
    {
        case 0:
           str[17]='1';
           break;
        case 1:
            str[17]='0';
            break;
        case 2:
            str[17]='x';
            break;
        case 3:
            str[17]='9';
            break;
        case 4:
            str[17]='8';
            break;
        case 5:
            str[17]='7';
            break;
        case 6:
            str[17]='6';
            break;
        case 7:
           str[17]='5';
            break;
        case 8:
            str[17]='4';
            break;
        case 9:
            str[17]='3';
            break;
        case 10:
            str[17] ='2';
            break;
    }
    puts(str);  //调正之后输出18位数字
    return 0;
}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论