PAT 1048 數字加密 python

2021-08-27 23:43:47 字數 1559 閱讀 5021

本題要求實現一種數字加密方法。首先固定乙個加密用正整數 a,對任一正整數 b,將其每 1 位數字與 a 的對應位置上的數字進行以下運算:對奇數字,對應位的數字相加後對 13 取餘——這裡用 j 代表 10、q 代表 11、k 代表 12;對偶數字,用 b 的數字減去 a 的數字,若結果為負數,則再加 10。這裡令個位為第 1 位。

輸入格式:

輸入在一行中依次給出 a 和 b,均為不超過 100 位的正整數,其間以空格分隔。

輸出格式:

在一行中輸出加密後的結果。

輸入樣例:

1234567 368782971

輸出樣例:

3695q8118

問題分析:

本題最大的問題在於,如果a比b長,需要用0補齊,不然測試點2、5過不去

然鵝題中沒說啊啊啊啊

**:

def

odd(a, b):

l = ['j', 'q', 'k']

num_odd = eval('( + ) % 13'.format(a, b))

if num_odd > 9:

return l[num_odd - 10]

else:

return str(num_odd)

defeven

(a, b):

num_even = eval(' - '.format(b, a))

if num_even < 0:

return str(num_even + 10)

else:

return str(num_even)

n = input().split()

rst =

if len(n[0]) > len(n[1]):

n[1] = n[1].rjust(len(n[0]), '0')

if len(n[0]) % 2 == 0:

for i in range(-1, -len(n[0]), -2):

rst.insert(0, odd(n[0][i], n[1][i]))

rst.insert(0, even(n[0][i-1], n[1][i-1]))

else:

tmp = 0

for i in range(-1, -len(n[0]), -2):

tmp = i - 2

rst.insert(0, odd(n[0][i], n[1][i]))

rst.insert(0, even(n[0][i-1], n[1][i-1]))

rst.insert(0, odd(n[0][tmp], n[1][tmp]))

if len(n[1]) > len(n[0]):

rst.insert(0, n[1][:len(n[1]) - len(n[0])])

print(''.join(rst))

PAT 1048 數字加密

本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用j代表10 q代表11 k代表12 對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個位為第1位。輸入格式 輸入...

PAT 1048數字加密

include include include include using namespace std int main min alen for int i 0 i min i elseelse reverse b.begin b.end cout 有乙個坑就是,如果b比a短,需要補齊,在網上搜了...

PAT 1048 數字加密

題目連線 思路 首先,題目給出a與b均為不超過100位的,而int型顯然不夠這麼多位,肯定採用大數方法,即採用字串輸入,通過int型陣列倒序儲存。例如 輸入 1234567 這用string輸入每乙個均為char型,然後申請int型陣列倒序 即變為7654321 這裡的每一位是int型 可直接進行加...