zoukankan      html  css  js  c++  java
  • PAT 1031 乙级

    题目:一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

    首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

    Z:0 1 2 3 4 5 6 7 8 9 10
    M:1 0 X 9 8 7 6 5 4 3 2
    
    现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
    思路:计算出对应校验码,然后与对应位置的校验码对比。
    #include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; int main() { int weight[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 }; int N = 0, index = 0, flag = 0, judge = 0; cin >> N; char M[11] = { '1','0','X' ,'9', '8', '7', '6', '5', '4', '3', '2' }; int* sum = new int[N]; vector<string> identity; for (int i = 0; i < N; i++) { string teamp; cin >> teamp; sum[i] = 0; identity.push_back(teamp); if (identity[i].size() != 18)return 0; } for (int i = 0; i < N; i++) {//外层循环切换身份 for (int j = 0; j < 17; j++) {//内层循环加权 sum[i] = sum[i] + (identity[i][j] - '0')*weight[j]; } index = sum[i] % 11;//和对十一取模,获取对应的校验码 if (M[index] !=identity[i][17] )cout << identity[i] << endl;//身份最后一位与校验码不同,输出错误身份 else flag ++; } if (flag == N)cout << "All passed"; return 0; }
  • 相关阅读:
    Shell需注意的语法问题
    iconv编码转换
    使用cocos创建的项目,如何进行源码调试?
    git切换到远程分支
    在 Git 中 Checkout 历史版本
    JAVA keytool 使用详解
    JAVA调用 keytool 生成keystore 和 cer 证书
    写出好的 commit message
    JAVA
    面试中关于Java你所需知道的的一切
  • 原文地址:https://www.cnblogs.com/zongji/p/12499897.html
Copyright © 2011-2022 走看看