【B1048 數字加密】坑太深

【題目】1048 數字加密 (20 分)
本題要求實現一種數字加密方法。首先固定一個加密用正整數 A,對任一正整數 B,將其每 1 位數字與 A 的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對 13 取餘——這裏用 J 代表 10、Q 代表 11、K 代表 12;對偶數位,用 B 的數字減去 A 的數字,若結果爲負數,則再加 10。這裏令個位爲第 1 位。
輸入格式:
輸入在一行中依次給出 A 和 B,均爲不超過 100 位的正整數,其間以空格分隔。
【輸出格式】
在一行中輸出加密後的結果。
【輸入樣例】
1234567 368782971
輸出樣例:
3695Q8118
【防止入坑】:如果A的位數比B長,得把B補成跟A一樣長才行。
【反思】:第一次提交這題的時候就是以爲,如果A比B長,則多餘部分不用管,導致部分正確16/20,兩個檢測點沒過,其實此題給的輸入樣例有所誤導,樣例中的A的長度小於B的長度,多於A的長度的部分的B的字符串沒有對其進行任何處理,就很容易誤導答題人以爲對於,len(A)>len(B)的部分不進行任何處理。從而很容易導致錯誤!感覺這題出題不嚴謹啊!!!題幹中沒有任何表述展示出這一提示信息。
【code】
#include<stdio.h>
#include<string.h>
//B1048
//19-2-13
char A[105],B[105],word[3]={'J','Q','K'};
void reverse(char x[],int len){
int i,j;
char ch;
for(i=0,j=len-1;i<j;i++,j--){
ch=x[i];
x[i]=x[j];
x[j]=ch;
}
}
int main(){
int len1,len2,i,t1;
scanf("%s%s",A,B);
len1=strlen(A);
reverse(A,len1);
len2=strlen(B);
reverse(B,len2);
if(len1>len2){
for(i=len2;i<len1;i++){
B[i]='0';
}
len2=len1;
}
for(i=0;i<len1&&i<len2;i++){
if(i%2==0){
t1=((B[i]-'0')+(A[i]-'0'))%13;
}else{
t1=B[i]-A[i];
if(t1<0)
t1+=10;
}
if(t1>=10){
B[i]=word[t1-10];
}else{
B[i]=t1+'0';
}
}
reverse(B,len2);
printf("%s",B);
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章