本題要求實現一種數字加密方法。首先固定乙個加密用正整數 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型 可直接進行加...