用python来解 PAT 1048数字加密-20-满分无超时

题意理解一下,输入两条数字A,B,从各位开始一一对应,奇数位两数相加,对13取余,结果由J代替10,Q代替11,K代替12,然后偶数位由B-A,结果为正直接输出,为负就+10,输出的结果位每一位的结果按照原先的顺序输出。

分析一下,为了方便进行一一对应的进行计算,先将A,B倒序,然后根据奇偶进行计算,最后输出结果就行,该题还是比较简单的,但是也要注意有个坑,当A,B长度不一致时,如果A比B长,B需要进行补0操作,如果B更长,对A补0其实就相当于直接输出多余部分。

代码如下:

A,B=input().split()#输入得到A,B
A=A[::-1]
B=B[::-1]#将A,B逆序
res=[]
s='JQK'
flag=1#设置变量来判断奇偶性
if(len(B)<len(A)):
    B+='0'*(len(A)-len(B))#如果A比B长,将B用0补足
for i,j in zip(A,B):
    if(flag%2!=0):
        res.append((int(i)+int(j))%13)#奇数时对应两数相加取对13余数
    else:
        res.append(int(j)-int(i))#偶数时相减
    flag+=1
if(len(B)>len(A)):
    for i in B[len(A):]:
        res.append(int(i))#如果B比A长,直接将B长的部分加到结果中就行
for i in res[::-1]:
    if(i>=10):
        print(s[i-10],end='')#取余值大于10取对应字母JQK
    elif(i<0):
        print(i+10,end='')#相减值为负数+10
    else:
        print(i,end='')

提交结果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值