我编写了一个适用于基础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)
答案 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)