#include<stdio.h>
int main()
{
char s;
int num;
while(scanf("%c%d", &s, &num)!=EOF)
{
int f;
switch(s)
{
case 87:
f=32;
break;
case 90:
f=33;
break;
case 73:
f=34;
break;
case 79:
f=35;
break;
};
if(s>=65 && s<=72) f=s-55;
else if(s>=74 && s<=78) f=s-56;
else if(s>=80 && s<=86) f=s-57;
else if(s==88 || s==89) f=s-58;
int i;
int sum=(f%10)*9+(f/10);
for(i=0;i<9;i++)
{
if(i==0)
{
sum+=num%10;
num/=10;
i+=1;
}
sum+=(num%10)*i;
num/=10;
}
if(sum%10==0) printf("real\n");
else printf("fake\n");
}
return 0;
}
第 1 測資點(0%): OLE ()
冗餘輸出
請勿輸出題目未要求的文字: fake
#include
int main()
{
char s;
int num;
while(scanf("%c%d", &s, &num)!=EOF)
{
int f;
switch(s)
{
case 87:
f=32;
break;
case 90:
f=33;
break;
case 73:
f=34;
break;
case 79:
f=35;
break;
};
if(s>=65 && s<=72) f=s-55;
else if(s>=74 && s<=78) f=s-56;
else if(s>=80 && s<=86) f=s-57;
else if(s==88 || s==89) f=s-58;
int i;
int sum=(f%10)*9+(f/10);
for(i=0;i<9;i++)
{
if(i==0)
{
sum+=num%10;
num/=10;
i+=1;
}
sum+=(num%10)*i;
num/=10;
}
if(sum%10==0) printf("real\n");
else printf("fake\n");
}
return 0;
}
第 1 測資點(0%): OLE ()
冗餘輸出
請勿輸出題目未要求的文字: fake
應該在"#include<stdio.h>"的後面加入"#include<string.h>"(string.h用來處裡字串的)
在"int main()"的前面加上int型態的z陣列"int z[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 main()"要宣告:
int a,b[10],w,s;
char x[1024];
(a用作迴圈計數器,w用作存放身分證號碼是否錯誤的旗標,s存放總和)
(因為x的字元數不明)
然後是while迴圈,要改成這樣
while(scanf("%s",x)!=EOF){
w=0;
if(strlen(x)!=10){//錯誤的身分證號碼長度
w=1;
}else{
if(x[0]<65||x[0]>90){//錯誤的身分證號碼第1個字元
w=1;
}else{
b[0]=z[x[0]-65];
for(a=1;a<10;a++){
if(x[a]<48||x[a]>57){//錯誤的身分證號碼第2-10個字元
w=1;
}else{
b[a]=x[a]-48;
}
}
if(x[1]<49||x[1]>50){//錯誤的身分證號碼第2個字元
w=1;
}
s=(b[0]%10)*9+(b[0]/10);
for(a=1;a<9;a++){
s+=b[a]*(9-a);
}
s+=b[9];
if(s%10!=0){//錯誤的身分證號碼第10位字元
w=1;
}
}
}
if(w==0){
printf("real\n");
}else{
printf("fake\n");
}
}
一開始先判斷strlen(x)是否為10,strlen(x)用來取得字串長度,若不是10則送出fake
若是10則判斷x[0]是否在ASCII碼的65-90(A-Z),若不在65-90則送出fake
若在65-90則用for迴圈判斷x[1]-x[9]是否在ASCII碼的48-57(0-9),若不在48-57則送出fake
若在48-57則判斷x[1]是否為ASCII碼的49或50(1或2),若不在49-50則送出fake
若在49-50則算s:s=(b[0]%10)*9+(b[0]/10);
再用for迴圈加b[a]*(9-a)到s:s+=b[a]*(9-a);
再加b[9]的值:s+=b[a]*(9-a);
再讓s%10,若s%10不是0則送出fake
否則送出real,結束判斷再讀另1筆測資
最後才"return 0;"結束程式