小弟程式新手,原本用暴力解,看了一下大家的討論改採用迴圈的方式
以下是程式碼,想請問有更好的解法嗎?
#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;
}