PAT乙1048. 數字加密(20)
阿新 • • 發佈:2019-01-12
題目在這裡
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; }