PAT:1031. 查验身份证(15) AC

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
  int weight[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
  char M[15]={'1','0','X','9','8','7','6','5','4','3','2'};
  int n;
  bool TAG=true;          //是否全都没问题的标志
  scanf("%d",&n);
  for(int t=0 ; t<n ; ++t)
  {
    char str[20];
    scanf("%s",str);
    int len=strlen(str);
    int sum=0;
    bool tag=true;        //每一轮是否有问题的小标志
    for(int i=0 ; i<len-1 ; ++i)
    {
      
      int tmp=str[i]-'0';
      if(tmp>=0 && tmp<=9)  //判断前16位是否有字母,for到len-1
        sum+=tmp*weight[i];
      else
      {
        tag=0;        //前16位有字母,非法输入
        break;
      }
    }
    int Z=sum%11;        //判断最后一位是否正确
    if(M[Z]!=str[len-1])
      tag=0;
    if(0==tag)          //如果号码有问题,输出
    {
      TAG=false;        //至少一个有问题
      puts(str);
    }
  }
  if(true==TAG)          //全都没问题
    printf("All passed");
  //system("pause");
  return 0;
}
原文地址:https://www.cnblogs.com/Evence/p/4296342.html