【发布时间】:2015-12-12 05:07:33
【问题描述】:
我有一个算法可以模拟手动将二进制数转换为十进制数。我的意思是每个数字都表示为一个数字数组(从最低到最高有效),而不是使用语言的 int 或 bigint 类型。
例如,base-10 中的 42 将表示为 [2, 4],base-2 中的 10111 将表示为 [1, 1, 1, 0, 1]。
这里是 Python。
def double(decimal):
result = []
carry = 0
for i in range(len(decimal)):
result.append((2 * decimal[i] + carry) % 10)
carry = floor((2 * decimal[i] + carry) / 10)
if carry != 0:
result.append(carry)
return result
def to_decimal(binary):
decimal = []
for i in reversed(range(len(binary))):
decimal = double(decimal)
if binary[i]:
if decimal == []:
decimal = [1]
else:
decimal[0] += 1
return decimal
这是我几个学期前的算法课作业的一部分,他在笔记中向我们提出了一个挑战,声称我们应该能够从这个算法中推导出一个可以将数字从base-2^k 到二进制。我今天挖了这个,它一直困扰着我(阅读:让我觉得很生疏),所以我希望有人能够解释我如何根据这个算法编写一个 to_binary(number, k) 函数。
【问题讨论】:
-
这是一个比您已经解决的问题要简单得多的问题,因为底数都是 2 的幂。
-
base-2^k 中的每个数字变成二进制 k 位:
5,13,31in base-2^5 变成00101,01101,11111,或者放在一起:@987654327 @.