Binary 13号基地-搭便车者';s银河系指南
我知道13垒不实用。然而,我又在看《银河系漫游指南》,因为今天的日期是10/10/10=42。(你知道,生命、宇宙和一切的终极问题的答案)经过七百五十万年的深思熟虑,才计算和检验出答案,结果是42。不幸的是,最终的问题本身是未知的。不管怎样,他说“六乘九”。四十二。”“就是这样。“我一直认为宇宙存在根本性的问题” 我的问题是,以13=42为基数的6 x 9是多少 我知道如何转换基数10,2,16,8,但从基数10到基数13对我来说是个谜。 我知道在13进制中,6可能=6,9可能=9s0,这只是在13进制中相乘的问题 有人能解决吗? 我发现了这个,但没有多大帮助Binary 13号基地-搭便车者';s银河系指南,binary,Binary,我知道13垒不实用。然而,我又在看《银河系漫游指南》,因为今天的日期是10/10/10=42。(你知道,生命、宇宙和一切的终极问题的答案)经过七百五十万年的深思熟虑,才计算和检验出答案,结果是42。不幸的是,最终的问题本身是未知的。不管怎样,他说“六乘九”。四十二。”“就是这样。“我一直认为宇宙存在根本性的问题” 我的问题是,以13=42为基数的6 x 9是多少 我知道如何转换基数10,2,16,8,但从基数10到基数13对我来说是个谜。 我知道在13进制中,6可能=6,9可能=9s0,这只是在
in base 13, 6 13 × 9 13 is actually 4213
(as 4 × 13 + 2 = 54, i.e. 54 in decimal is
equal to 42 expressed in base 13).
这是一种可以将基数为10的数字转换为基数为13的方法: 从数字9x6=54开始,我们想在基数13中找到54的等价物
54 / 13 = 4 remainder 2
4 / 13 = 0 remainder 4
我们从下到上连接其余的42
一个更一般的算法,从一个十进制数N开始,我们想在基数B中找到N的等价物
N / B = a1 remainder r1
a1 / B = a2 remainder r2
....
an / B = 0 remainder rn
并连接数字,自下而上:rn…..r2.r1
Python中的迭代实现:
digits = '0123456789abcdefghijklmnopqrstuvwxyz'
def rebase(n, base=2):
''' Convert a positive integer to number string with base `base` '''
s = []
while n != 0:
n, rem = divmod(n, base)
s.append(digits[rem])
return ''.join(reversed(s))
digits = '0123456789abcdefghijklmnopqrstuvwxyz'
def rebase(n, base=2):
''' Convert a positive integer to number string with base `base` '''
return rebase(n // base, base) + digits[n % base] if n != 0 else ''
Python中的递归实现:
digits = '0123456789abcdefghijklmnopqrstuvwxyz'
def rebase(n, base=2):
''' Convert a positive integer to number string with base `base` '''
s = []
while n != 0:
n, rem = divmod(n, base)
s.append(digits[rem])
return ''.join(reversed(s))
digits = '0123456789abcdefghijklmnopqrstuvwxyz'
def rebase(n, base=2):
''' Convert a positive integer to number string with base `base` '''
return rebase(n // base, base) + digits[n % base] if n != 0 else ''
更一般地说,如果您有一个以N为基数表示数字的字符串,并且希望将其转换为以M为基数表示数字的字符串:
digits = '0123456789abcdefghijklmnopqrstuvwxyz'
def rebase(orig, orig_base=10, target_base=2):
''' Convert a positive integer to number string with base `base` '''
num = 0
for i, n in enumerate(reversed(orig)):
num += digits.find(n) * (orig_base**i)
target = []
while num != 0:
num, rem = divmod(num, target_base)
target.append(digits[rem])
return ''.join(reversed(target))
这不是在不同的基中多个数字的问题,而是在该基中表示乘积的问题 让我们从一个非常简单的基数开始,一元数,它只表示为一(甚至不表示为零) 一元数中的6x9是111111x1111111。我们可以通过将一个术语中的所有值替换为另一个术语中的值来执行该计算。将九个值复制并粘贴六次 111111111111111111111111111111111111111111111111111111 当我们想用更方便的基数来表示这个数字时,我们就用基数来分组。如果有足够的组来分组,我们就把它们分组。然后用数字来代替组的计数。我们将用十进制来做
111111111111111111111111111111111111111111111111111111
^ ^ ^ ^ ^
每个箭头是一组10个,剩下4个,所以在十的位置,我们放了一个5,在一个位置放了一个4,54
让我们对较小的基数也做同样的事情,这样我们就可以很好地了解如何推广这些群
组别:
1 111111111111111111111111111111111111111111111111111111
2 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
4 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
8 ^ ^ ^ ^ ^ ^
16 ^ ^ ^
32 ^
我们可以分成五组。从1开始,我们按2分组后没有剩余的1,所以第一个数字是0。当我们按4分组时,还有一组2剩余,所以下一个数字是1。当我们按8分组时,还有一组4剩余,另一个1是下一个数字。当我们按16分组时,第剩下一组8。当按32分组时,剩下一组16。我们无法将64这样大的数字组成一组,因此32以上位置的所有数字都是0。因此二进制表示为
110110
最后是基数13。这和基数10一样简单
111111111111111111111111111111111111111111111111111111
^ ^ ^ ^
13分为4组。在我们做了这4组之后,剩下两个数字。因此,当以13为基数表示时,6 x 9的乘积是“42”答案42与以13为基数无关,它只是一个计算错误 这个问题的答案很简单 这是个玩笑,一定是个数字,一个 普通的小数字,我选择了 那个,二进制表示,基数 十三、藏族僧侣都是 完全是胡说八道。我坐在桌子旁, 凝视着花园,想着42年 行。我打出来了。结束了 故事
试试看。我不明白你怎么能转换成这么多的基数,但仍然无法得到一般的算法。你使用查找表还是什么?没有人用基数13写笑话!正如你所知-42天==10!秒;-)