2301_81417889 2023-12-05 00:34 采纳率: 0%
浏览 43

pta有个测试点始终不能通过,不知道怎么回事

选择合适的方案,实现一个身份证号码验证程序。合格的身份证号码要求如下:身份证号要求18位组成,前17位均为数字,最后一位为校验码,校验码必须是数字或字母X(大小写均可)。

输入格式:
在一行中输入一行数字,代表身份证号码

输出格式:
输出判断结果,“身份证号码合法”或在“身份证号码合法”

输入样例:
在这里给出一组输入。例如:

330683198901117657
输出样例:
在这里给出相应的输出。例如:

身份证号码合法

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int k = 0;
    char str[100];
    gets(str);
    int i;
    if (strlen(str) == 18)
    {
        for (i = 0;i < 18;i++)
        {
            if (str[i] >= '0' && str[i] <= '9')
                k++;
        }
    }
    if ((str[17] == 'x') || (str[17] == 'X'))
        k++;
    if (k == 18)
        printf("身份证号码合法");
    return 0;
}

  • 写回答

4条回答 默认 最新

  • 一个风轻云淡 后端领域优质创作者 2023-12-05 09:23
    关注
    
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    int main() {
        char str[100];
        printf("请输入身份证号码:");
        scanf("%s", str);
    
        int len = strlen(str);
        if (len != 18) {
            printf("身份证号码长度不合法\n");
            return -1;
        }
    
        int i, j, sum = 0;
        for (i = 0; i < len - 1; i++) {
            if (!isdigit(str[i])) {
                printf("身份证号码包含非数字字符\n");
                return -1;
            }
            sum += (str[i] - '0') * (1 << (17 - i));
        }
    
        int check_bit = (str[len-1] == 'x' || str[len-1] == 'X') ? 10 : (str[len-1] - '0');
        if ((12 - sum % 11) % 11 != check_bit) {
            printf("身份证号码校验位不正确\n");
            return -1;
        }
    
        printf("身份证号码合法\n");
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月5日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图