1. 程式人生 > >網易互娛人工智能工程師筆試題

網易互娛人工智能工程師筆試題

nbsp 操作 高位到低位 題目 進制數 print 工程師 lse 2個

考試的時候第二題調了好久一直是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)

網易互娛人工智能工程師筆試題