1. 程式人生 > >PAT乙1048. 數字加密(20)

PAT乙1048. 數字加密(20)

題目在這裡

1048. 數字加密(20)

時間限制 400 ms
記憶體限制 65536 kB
程式碼長度限制 8000 B
判題程式 Standard 作者 CHEN, Yue

本題要求實現一種數字加密方法。首先固定一個加密用正整數A,對任一正整數B,將其每1位數字與A的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對13取餘——這裡用J代表10、Q代表11、K代表12;對偶數位,用B的數字減去A的數字,若結果為負數,則再加10。這裡令個位為第1位。

輸入格式:

輸入在一行中依次給出A和B,均為不超過100位的正整數,其間以空格分隔。

輸出格式:

在一行中輸出加密後的結果。

輸入樣例:
1234567 368782971
輸出樣例:
3695Q8118

#include<cstdio>
#include<cstring>
int main(){
	char a[105]={0},b[105]={0},ans[105],max[105],temp;
	char tran[15]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
	int i,j,lengtha,lengthb,length,m;
	scanf("%s %s",a,b);
	lengtha=strlen(a);							//個位為第一位,需要進行反轉 
	lengthb=strlen(b); 
	for(i=0;i<lengtha/2;i++){
		temp=a[i];
		a[i]=a[lengtha-i-1];
		a[lengtha-i-1]=temp;
	} 
	for(i=0;i<lengthb/2;i++){
		temp=b[i];
		b[i]=b[lengthb-i-1];
		b[lengthb-i-1]=temp;
	}
	if(lengtha>lengthb){
		length=lengtha;
		m=lengthb;
		strcpy(max,a);
	}else{
		length=lengthb;
		m=lengtha;
		strcpy(max,b);
	}
	for(i=0;i<m;i++){
		if(i%2==0){								//偶數 
			ans[i]=tran[(a[i]+b[i]-2*'0')%13];
		}else{									//奇數 
			if((b[i]-a[i])<0){
				ans[i]=tran[(b[i]-a[i])+10];
			}else{
				ans[i]=tran[b[i]-a[i]];
			}
		}
	}
	for(i=m;i<length;i++){
		ans[i]=max[i];
	}
	for(i=length-1;i>=0;i--){
		printf("%c",ans[i]);
	} 
	return 0;
}