PAT B1048 數字加密 20 分

2021-10-19 07:02:13 字數 1353 閱讀 4137

本題要求實現一種數字加密方法。首先固定乙個加密用正整數 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取餘 這裡用...