使用python base 8的快乐数字

时间:2014-03-23 05:52:03

标签: python

我编写了一个适用于基础10的代码
如何使其适用于基地8 ??

SQUARE = dict([(c, int(c)**2) for c in "0123456789"])
def is_happy(n):
 s = set()
 while (n > 1) and (n not in s):
   s.add(n)
   n = sum(SQUARE[d] for d in str(n))
 return n == 1

a=is_happy(28)

2 个答案:

答案 0 :(得分:2)

改为使用八进制表示法。

n = sum(SQUARE[d] for d in oct(n))

答案 1 :(得分:2)

您只需要替换算法中使用“base-10”与base 8一起使用的所有位置。唯一真正的位置是当我们将数字转换为字符串时,我们可以将每个“数字”平方。要确定数字,我们需要一个基数。通常,我们选择基数10,如您的示例所示。 Converting an integer to a string in an arbitrary base (or, in your case 8) has been answered here

我们也可能会调整查找表SQUARE

def to_base_8(n):
    digits = []
    while n > 0:
        digits.append(str(n % 8))
        n = n // 8
    return ''.join(reversed(digits))

SQUARE = dict([(c, int(c)**2) for c in "01234567"])
def is_happy(n):
 s = set()
 while (n > 1) and (n not in s):
   s.add(n)
   n = sum(SQUARE[d] for d in to_base_8(n))
 return n == 1

a=is_happy(28)