首页 > 其他 > 详细

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

时间:2019-04-07 16:33:30      阅读:158      评论:0      收藏:0      [点我收藏+]

考试的时候第二题调了好久一直是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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!