#27048: C語言,請問有更好的解法嗎?


qazxj4qo4vup@gmail.com (quad0510)

學校 : 不指定學校
編號 : 133053
來源 : [36.238.132.80]
最後登入時間 :
2022-04-14 21:03:23
a020. 身分證檢驗 | From: [114.47.83.101] | 發表日期 : 2021-09-09 22:20

小弟程式新手,原本用暴力解,看了一下大家的討論改採用迴圈的方式

以下是程式碼,想請問有更好的解法嗎?

 

#include <stdio.h>

int main(){

    char en[26]={'A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','X','Y','W','Z','I','O'};

    char num[26]={10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35};

    char ID[10];

    int i,code;

 

    scanf("%s",&ID);

    //判斷開頭字母,將字母與數字對應,對應到數字存入ID[0]]

    for(i=0;i<=25;i++){

        if(ID[0]==en[i]){

            ID[0]=num[i];

            break;

        }

    }

    //將字母對應到的數,個位數乘九加上十位數,並存入code

    code=(ID[0]%10)*9+ID[0]/10;

    //利用迴圈依序處理身分證字號的第一到第八個數字

    for(i=1;i<9;i++)

        code=code+(ID[i]-'0')*(9-i);

    //加上第九個數字

    code=code+ID[9]-'0';

    //印出結果

    if(code%10==0)

        printf("real");

    else

        printf("fake");

    return 0;

}

 

 
ZeroJudge Forum