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不一定等长,当a长于b时,需要将b用0补全至与a相同的长度(注意是补全b不是补全结果,这也是测试点2和5所测试的) ,当b长于a时,b长出的部分无需加密,直接拼接上即可。
python代码:
a,b=input().split()
a=list(map(int,a))
b=list(map(int,b))
#对应10,11,12
#Corresponds to 10,11,12
correspond=['J','Q','K']
n=len(a)
#如果a的长度大于b,则需要将b开头用0补齐
#If the length of a is greater than b,We need to fill in the beginning of b with 0
if len(a)>len(b):
n_1=0
for i in range(len(a)-len(b)):
b.insert(0,0)
else:
n_1=len(b)-len(a)
result=[]
for i in range(n):
#偶数
#even
if (i+1)%2==0:
c=b[len(b)-i-1]-a[len(a)-i-1]
if c<0:
c=c+10
result.insert(0,str(c))
#奇数
#odd number
else:
c=b[len(b)-i-1]+a[len(a)-i-1]
c=c%13
if c<10:
result.insert(0,str(c))
else:
c=correspond[c%10]
result.insert(0,c)
if not n_1==0:
for j in range(n_1-1,-1,-1):
result.insert(0,str(b[j]))
print(*result,sep='')