Base64编码转换

提交数: 400, 通过率: 49%, 平均分: 74.87

题目描述:

Base64编码是计算机中常见的一种编码方式,规则是把3个字节(24位)的数据按照6位1组分成4组(24/6=4),然后将每组数据分别转换为十进制,根据下表将这些十进制数所对应的字符连接,即为Base64编码。

1695644696180306607.png

你的任务是将输入的字符串按照每个字符的ASCII码转化为对应的二进制数,然后按照六位二进制位分组后转化为十进制,并将其转化成对应的Base64编码。输出得到的Base64编码。如果原文的字节数量不满足为3的倍数,则原文剩余的字节根据编码规则单独转,最后一段不够6位二进制位的后面用0补满6位,再用\( "="\)补全4个字符。

输入格式:

只有一行,是一个字符序列。

输出格式:

只有一行,输出该字符序列对应的Base64编码。

样例输入:

样例输入1:
Web

样例输入2:
WebM

样例输出:

样例输出1:
V2Vi

样例输出2:
V2ViTQ==

提示:

样例按照下表规则进行Base64编码

1695645875507814190.png

M字符对应的Base64编码为:TQ==

完善程序:

预备知识:二进制的移位运算, 左移1位,相当于乘以2, 右移1位,相当于除以2,取末尾1位,对2取余数,

                   同理,取低4位即 % 16。取一个字节的高2位,可以用右移6位实现,即除以 64。 

rs = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
s = input()
ans = ""
for i in range( __________填空1___________ ):
    a1 = ord(s[i])
    a2 = ord(s[i + 1])
    a3 = ord(s[i + 2])
    b1 = a1 // 4
    b2 = a1 % 4 * 16 + a2 // 16
    b3 =__________填空2___________ 
    b4 = a3 % 64
    ans = ans + rs[b1] + rs[b2] + rs[b3] + rs[b4]

if len( s ) % 3 == 1:
    a1 = ord( s[-1] )
    b1 = a1 // 4
    b2 = __________填空3___________ 
    ans = ans + rs[b1] + rs[b2] + '=='

if len( s ) % 3 == 2:
    a1 = ord( s[-2] )
    a2 = ord( s[-1] )
    b1 = a1 // 4
    b2 = a1 % 4 * 16 + a2 // 16
    b3 = __________填空4___________ 
    ans = ans + rs[b1] + rs[b2] +  rs[b3] + '='

print( ans )
时间限制: 1000ms
空间限制: 256MB

来源: 必修1教材P35