本題要求實現一種數字加密方法。首先固定乙個加密用正整數 a,對任一正整數 b,將其每 1 位數字與 a 的對應位置上的數字進行以下運算:對奇數字,對應位的數字相加後對 13 取餘——這裡用 j 代表 10、q 代表 11、k 代表 12;對偶數字,用 b 的數字減去 a 的數字,若結果為負數,則再加 10。這裡令個位為第 1 位。
輸入格式:
輸入在一行中依次給出 a 和 b,均為不超過 100 位的正整數,其間以空格分隔。
輸出格式:
在一行中輸出加密後的結果。
輸入樣例:
1234567 368782971
輸出樣例:
3695q8118
以下是ac的**:
#include
#include
#define lens 110
char a[lens]
,b[lens]
,ans[lens]
;void
revers
(char str)
;int
main
(void)}
}else
} ans[len]
='\0'
;revers
(ans)
;//這裡還需要考慮ans以0開頭的情況;
int strt;
for(strt=
0;strt(strt==len)
printf
("0");
else
printf
("%s"
,ans+strt)
;return0;
}void
revers
(char str)
}
思路:
使用金鑰 a 數字對 數字 b 進行加密,要求奇數字和偶數字分別採用不同的方法進行處理,最後輸出。
這裡分別使用兩個字串 ,a ,b 放數字,然後將兩個陣列逆轉方便對齊個位處理,按照位次依次處理後放到答案陣列 ans 中,將 ans 逆轉之後輸出。這裡有幾個需要注意的點:
1,字串陣列下標從0開始,則陣列下標是偶數對應原來的奇數字,奇數對應偶數字;
2,根據題意應該取較長的數字長度進行處理,比如 a=6666,b=67,答案應該是4600,而不是0;(這裡我開始理解錯了,有乙個測試點過不了,找了很久沒有找出來,看了答案才明白的。)
3,最後我做的時候還是考慮了ans陣列以0開頭的情況,假如說 a=66,b=68, ans=『01』,輸出的時候應該把0去掉,只輸出1;另外考慮ans陣列全為 0 的情況,需要自己輸出乙個0;(雖然答案說不考慮ans以0開頭的情況也能過。這裡只是提供一種思路,如果增加測試點呢,自己知道這裡需要注意就行了。)
PATB 1048 數字加密(20 分)
思路分析 1 把字串轉換為int型陣列 num 0 儲存個位,逆向儲存 構造乙個轉換函式,依次呼叫 2 將陣列內的數字按個位為第一位的順利按規定奇偶規則處理,得到字串 3 輸出 注意 len1 a字串長度 大於len2 b字串長度 時自動補零 個位為第一位 include stdio.h inclu...
PAT B 1048 數字加密 (20 分)
本題要求實現一種數字加密方法。首先固定乙個加密用正整數 a,對任一正整數 b,將其每 1 位數字與 a 的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對 13 取餘 這裡用 j 代表 10 q 代表 11 k 代表 12 對偶數字,用 b 的數字減去 a 的數字,若結果為負數,則再加 ...
PAT B 1048 數字加密 20
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用...