我收到非常大的2^k數字的數字列表(k < = 30,數字量< = 10^7)。在不同基地中對非常大的數字執行操作的最快方法
我需要做的是讓兩個數字(我們姑且稱之爲X和Y),減去他們(A = XY,B = YX)並返回的二進制表示和B.
我當前的代碼看起來是這樣的:
k = int(input())
base = pow(2, k)
numbersX = stdin.readline().split()
digitsX = len(numbersA) - 1
x = 0
i = 1
while i <= digitsX:
factor = pow(base, digitsX - i)
x += int(numbersX[i]) * factor
i += 1
(類似於爲Y)
我只是單純地接收數字轉換成十進制數,然後減去並獲得二進制表示。它的工作原理非常緩慢。你會建議其他解決方案嗎?
Sample input:
4 (for k)
6 15
2 7
So X = 6 15 = 6*16^1 + 15*16^0 = 96 + 15 = 111 (decimal)
Y = 2 7 = 2*16^1 + 7*16^0 = 32 + 7 = 39 (decimal)
A = X – Y = 111 – 39 = 72
B = Y – X = 39 – 111 = -72
Output:
01001000 (A in SM binary)
10111000 (B in U2 binary)
' '{:04B}'。格式(5)#0101'給出的二進制表示(如'str')零填充以具有4'的長度0b10010101'(或'int('10010101',2)')是由該位序列表示的整數......您不必爲任何這些操作而循環。 –
@hiroprotagonist,我不知道你是否正確理解我。 我收到具有4位數字的1024位數字,樣本輸入:981 5 0 1001.如何將此數字轉換爲二進制數? – MuchaZ
這不是一個完整的答案。但是,是的,我並沒有真正不喜歡。你的代碼也不完整。什麼是'基地'?輸入和期望輸出的例子將會很有幫助。 –