malloc_88 2020-01-25 14:32 采纳率: 0%
浏览 306

求各位大佬帮忙,PAT1031 查验身份证

大佬能不能帮我看看为什么这个答案输出总是循环的一个身份证,而不是多个有问题的身份证?

图片说明图片说明图片说明
图片说明

#include<cstdio>
#include<cstring>
char find[15] = {'1','0','X','9','8','7','6','5','4','3','2'} ;
int power[20] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int main()
{
    int n;
    int result = 0;
    int number = 0;
    char str[20];
    char * wrong[20];
    scanf("%d", &n);
    for(int j = 0; j < n; j++)
    {
        int i = 0;
        scanf("%s", str);
        for(i = 0; i < 17; i++)
        if(str[i] >= '0' && str[i] <= '9')
        result += (str[i]-'0')*power[i];
        else
        break;

        if(i < 17)
        wrong[number++] = str;
        else if(find[result % 11] != str[17])
        wrong[number++] = str;
    }
    if(number == 0)
    printf("All passed\n");
    else
    {
        for(int j = 0; j < number; j++)
        printf("%s\n", wrong[j]);
    }

    return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-01-25 23:45
    关注

    问题解决的话,请点下采纳

    // Q1052502.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    
    #include<cstdio>
    #include<cstring>
    #include<stdlib.h>
    char find[15] = {'1','0','X','9','8','7','6','5','4','3','2'} ;
    int power[20] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    int main()
    {
        int n;
        int result = 0;
        int number = 0;
        char str[20];
        char * wrong[20];
        for (int i = 0; i < 20; i++)
            wrong[i] = (char *)malloc(sizeof(char) * 100);
        scanf("%d", &n);
        for(int j = 0; j < n; j++)
        {
            int i = 0;
            scanf("%s", str);
            for(i = 0; i < 17; i++)
            if(str[i] >= '0' && str[i] <= '9')
            result += (str[i]-'0')*power[i];
            else
            break;
    
            if(i < 17)
            strcpy(wrong[number++], str);
            else if(find[result % 11] != str[17])
            strcpy(wrong[number++], str);
        }
        if(number == 0)
        printf("All passed\n");
        else
        {
            for(int j = 0; j < number; j++)
            printf("%s\n", wrong[j]);
        }
    
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题