2 条题解

  • 3
    @ 2023-6-2 11:29:40

    听说可以用库函数做,但是自己模拟一遍也比较快

    首先搞一个对应关系字符串 op = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    对于s的每一个字符,用find()函数找到对应的十进制数,然后用bin()函数变为二进制(注意bin返回的东西是个字符串,前面有0x的前缀,需要切片)

    由于转为十进制前是八位二进制数,我们需要补上前导0至八位,这里写一个函数:

    def bu0(s):
        while len(s) != 8:
            s = "0"+s
        return s[2:]
    

    然后给它放到一个列表中:

    l = []
    for i in s:
        l.append(bu0(bin(op.find(i))[2:]))
    

    然后4个一组分组:

    l1 = []
    for i in range(0,len(l),4):
        t = l[i:i+4]
        s0 = ""
        for i in t:
            s0+=i
        l1.append(s0)
    

    最后字符串拼接就可以了,先变为十进制,用累乘相加法写个函数:

    def dec(s):
        ans = 0
        for i in s:
            ans = ans*2+int(i)
        return ans
    

    然后字符串拼接:

    for i in l1:
        t = []
        for j in range(0,len(i),8):
            ans+=chr(dec(i[j:j+8]))
    

    全部代码:

    def bu0(s):
        while len(s) != 8:
            s = "0"+s
        return s[2:]
    
    def dec(s):
        ans = 0
        for i in s:
            ans = ans*2+int(i)
        return ans
    
    op = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    s = input()
    ans = ""
    l = []
    for i in s:
        l.append(bu0(bin(op.find(i))[2:]))
    l1 = []
    for i in range(0,len(l),4):
        t = l[i:i+4]
        s0 = ""
        for i in t:
            s0+=i
        l1.append(s0)
    for i in l1:
        t = []
        for j in range(0,len(i),8):
            ans+=chr(dec(i[j:j+8]))
    
    print(ans)
    
    • 1
      @ 2023-5-28 18:06:38
      import base64
      
      print(base64.b64decode(input()).decode())
      
      • 1

      信息

      ID
      832
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      204
      已通过
      44
      上传者