【題目】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;
}
【B1048 數字加密】坑太深
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
IPSec***與NAT,PAT的恩恩怨怨
wangjian4171
2019-02-22 22:06:04
關於ASA各類型NAT的實驗說明
菠蘿味咖啡
2019-02-22 20:34:26
PAT乙級1062
qq58facce79d0fd
2019-02-22 20:09:39
package導致的PAT提交錯誤
qq58facce79d0fd
2019-02-22 20:09:38
***技術:PAT對***產生的影響
51CTO阿森
2019-02-22 19:33:58
1001. 害死人不償命的(3n+1)猜想 (15)
TonyiFly
2019-02-22 17:59:00
cisco2801路由器配置PAT實現企業內網上網
yanggangtao
2019-02-22 17:17:44
Packet Tracer 5.0建構CCNA實驗攻略(14)——PAT(基於端口的NAT)
hj200508928
2019-02-22 13:53:09
華爲PAT端口地址映射配置詳解(三)
愛草坪
2018-11-20 02:45:18
華爲PAT端口地址映射配置詳解(一)
愛草坪
2018-11-15 02:31:18
網絡地址轉換(PAT)
285008986
2018-10-13 02:29:58
NAT(網絡地址轉換)
ningjianghang
2018-09-13 02:49:43
1001. 害死人不償命的(3n+1)猜想 (15)
TonyiFly
2018-09-13 02:38:28
Packet Tracer 5.0建構CCNA實驗攻略(14)——PAT(基於端口的NAT)
hj200508928
2018-09-13 02:07:52
區塊鏈與數字加密貨幣領域的開放API
jimi2019
2018-12-31 13:16:06