a054

輸入說明 :

輸入有若干筆測試資料,每筆一行,含有一個身份證號碼的後 9 碼。

輸出說明 :

對於每筆測試資料,將可能的第一位大寫字母依字母順序輸出於一行。

從uva有一題輸入的字元是鍵盤上左移一格學到的一招,不要真的去手工一個一個建立關西, 直接按照順序開一個陣列,像這題就開一個alphabet 一一對應字母的值.

telephone[i]-48 因為ascii 48是零 printf("%c",i+65); 因為ascii 65是大寫的A

#include<stdio.h>
#include<string.h>
int main(){
char telephone[10];    
int alphabet[26]={10,11,12,13,14,15,16,17,34,18,19,
             20,21,22,35,23,24,25,26,27,28,29,
             32,30,31,33};    
int i;    
int last;
int first;     
    while(scanf("%s",telephone)!=EOF)    
    {   
        int sum=0;
        for(i=0;i<8;i++)
        {
            sum+=(telephone[i]-48)*(8-i);
        }
            last=telephone[8]-48;

            if(last==0)
            last=10;

        for(i=0;i<26;i++)
        {   
            first=0;
            first+=(alphabet[i]%10)*9;
            first+=alphabet[i]/10;
            if(10-(sum+first)%10==last)
              printf("%c",i+65);
        }
        printf("\n");            
    }     
return 0;    
}