网易互娱人工智能工程师笔试题

考试的时候第二题调了好久一直是30%,时间复杂度太高,现在想想还是题目分析的不够透彻!

题目大意:有一个大整数,每三位分成一组;把每一组三位数转成二进制数,再连接所有二进制数;二进制数每五位分成一组,每五位二进制数的数值范围为0-31,用0-9-A-V表示。高位到低位连接起来为最后结果。

分析:每个三位数有唯一的编码,每个三位数转成二进制,不会超过2个5位二进制数aaaaa,bbbbb(因为2的10次方=1024),aaaaa其实就是该数对32整除的结果,bbbbb是该数对32取余的结果。这样就不需要二进制数转换再进行分组转换了,直接对原十进制大整数进行除法与取余的操作。

n = int(sys.stdin.readline().strip())
for i in range(n):
    line = sys.stdin.readline().strip()
    three_num = list()
    final = ''
    while len(line)>0:
        three_num.append(int(line[-3:]))
        line = line[:-3]
    three_num.reverse()
    for num in three_num:
        a = num//32
        if a<10:
            final += str(a)
        else:
            final += chr(a-10+ord('A'))
        b = num%32
        if b<10:
            final += str(b)
        else:
            final += chr(b-10+ord('A'))
    if final[0] == "0":
        final = final[1:]
    print(final)

 

转载于:https://www.cnblogs.com/a-little-v/p/10665580.html

你可能感兴趣的:(网易互娱人工智能工程师笔试题)