来地球玩 2021-12-14 15:19 采纳率: 90%
浏览 52
已结题

C++这个程序怎么写

img

                                       7368:身份证的编码问题
                                   
描述
 中国大陆居民导份证号码由18位数字组成:第16位的数字为地址代码,表示某省某市某区或县:第714位的数字代表
 居民的出生年月日:第1517位的数字代表同一辖区内、同年同月同日出生的顺序号,其中第17位数字表示性别,奇数
 为男性,偶数为女性;第18位数字代表校验码。校验码是0~10这十个数字中的任意一个,其中10用X表示
 校验码的计算方法如下:
 1将身份证号码的前17位数学分别乘以对应的条数。对应关系如下:
                 号码位1234567 8 91011121314151617
                 系数7910584216379105842
 217位数字和系数相乘的结果累计求和:
 3用所求的和除以11得到条数
 4用余数与导份证号码的最后一位校验码进行对应,对应关条如下:
 
              
 输入身份证号码,输出出生日期、性别,实现判断最后一位校验码是否正确
输入
 输入一行,为其身份证号码
输出
 输出第一行为其出生日期,按照YYYY-MM-DD格式
 第二行为其性别,如果为男输出”male”,如果为女输出female”
 第三行为验证码是否正确,若正确输出“True,否则输出False”
样例输入
 339005200208086214
样例输出
 2002-08-08
 ma1e
 True
  • 写回答

2条回答 默认 最新

  • 记绘衣 2021-12-14 16:02
    关注
    
    #include<bits/stdc++.h>
    using namespace std;
    
    int main() {
    
       string s;
       int c[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
       int d[11]={1,0,10,9,8,7,6,5,4,3,2};
    
       cin>>s;
       cout<<s[6]<<s[7]<<s[8]<<s[9]<<"-"<<s[10]<<s[11]<<"-"<<s[12]<<s[13]<<endl;
       int a=s[16]-'0';
       if(a%2==0)
       {
           cout<<"female"<<endl;
       }
       else
       {
           cout<<"male"<<endl;
       }
       int cunt=0;
       for(int i=0;i<s.length();i++)
       {
           int b=s[i]-'0';
    
            cunt+=b*c[i];
       }
       cunt%=11;
       a=s[17]-'0';
       if(s[17]=='x') a=10;
       if(a==d[cunt])
       {
           cout<<"true"<<endl;
       }
       else cout<<"false"<<endl;
    
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答