close

內容

我國的身分證字號有底下這樣的規則,因此對於任意輸入的身分證字號可以有一些基本的判斷原則,請您來判斷一個身分證字號是否是正常的號碼(不代表確有此號、此人)。
(1) 英文代號以下表轉換成數字
      A=10 台北市     J=18 新竹縣     S=26 高雄縣
      B=11 台中市     K=19 苗栗縣     T=27 屏東縣
      C=12 基隆市     L=20 台中縣     U=28 花蓮縣
      D=13 台南市     M=21 南投縣     V=29 台東縣
      E=14 高雄市     N=22 彰化縣     W=32 金門縣
      F=15 台北縣     O=35 新竹市     X=30 澎湖縣
      G=16 宜蘭縣     P=23 雲林縣     Y=31 陽明山
      H=17 桃園縣     Q=24 嘉義縣     Z=33 連江縣
      I=34 嘉義市     R=25 台南縣
  (2) 英文轉成的數字, 個位數乘9再加上十位數的數字
  (3) 各數字從右到左依次乘1、2、3、4....8
  (4) 求出(2),(3) 及最後一碼的和
  (5) (4)除10 若整除,則為 real,否則為 fake
 例: T112663836
2 + 7*9 + 1*8 + 1*7 + 2*6 + 6*5 + 6*4 + 3*3 + 8*2 + 3*1 + 6 = 180
除以 10 整除,因此為 real 

 


輸入說明                      輸出說明
一組身分證號碼輸出      real or fake

 

C++解法

#include <iostream>
#include <string>
using namespace std;
int main ()
{
	string str1;
	int sum=0;
	int a,n1,n2;
	while(cin>>str1)
	{
		//將字母轉換成對應的數字並照題目給的公式進行計算(一)
		char ch [26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
		int as[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};
		for(int i=0;i<=25;i++) 
		{
			if(str1[0]==ch[i])
			{
				n1=(as[i]%10)*9; 
				n2=as[i]/10;
				sum=n1+n2;
			}
		}
		
		//依照題目給的公式進行計算(二) 
		int t=8;
		for(int i=1;i<=9;i++)
		{
			a=str1[i]-'0'; //string的數字不能直接轉為int 因為會變成ASCII碼 此時直接減掉0的ASCII即得到想要的數字 
			a=a*t;
			sum=sum+a;
			t--;
		}
		sum=sum+(str1[9]-'0');//因為str1[9]*t的時候 t==0 故此再加上str[9] 
		
		//判斷sum值是可被10整除 
		if(sum%10==0)
		{
			cout<<"real"<<endl;	
		}
		else
		{
			cout<<"fake"<<endl;	
		}
	}
	return 0;
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 豪CO 的頭像
    豪CO

    程式道路,必為豐富

    豪CO 發表在 痞客邦 留言(0) 人氣()