通常,可以将正自然数乘以n
通过将最右边的数字移到数字的前面称为n
-寄生数。 n本身是个位数的正自然数。例如:4×128205 = 512820
4×128205 = 512820
因此128205是4寄生数。不允许以零开头的自然数。所以即使
4×025641 = 102564
4×025641 = 102564
数字025641不是4寄生的。
分配:编写一个带有自然数的函数寄生函数。如果给定的自然数是n寄生的,则该函数必须返回值n。否则,该函数必须返回值0。
我的代码(最后定义的parastic(number))在某些情况下不起作用,例如:parasitic(142857)
n = 5而我的代码返回0。
def rotateLeft(number):
"""
>>> rotateLeft(717948)
179487
>>> rotateLeft(142857)
428571
>>> rotateLeft(105263157894736842)
52631578947368421
"""
k = str(number)
letter = k[:1]
numb = k[1:]
resultaat = str(numb) + str(letter)
return int(resultaat)
def rotateRight(number):
"""
>>> rotateRight(179487)
717948
>>> rotateRight(428571)
142857
>>> rotateRight(52631578947368421)
15263157894736842
"""
k = str(number)
letter = k[-1]
numb = k[:-1]
resultaat = str(letter) + str(numb)
return int(resultaat)
def parasitic(number):
"""
>>> parasitic(179487)
4
>>> parasitic(142857)
5
>>> parasitic(105263157894736842)
2
>>> parasitic(1234)
0
"""
count = 0
getal = count * number
while getal != rotateLeft(number):
count += 1
getal = count * number
if getal == rotateLeft(number):
break
return (count)
else:
return 0
最佳答案
虽然使用while
循环可以提高您对python的了解,但可以使用%
运算符解决。
def rotateRight(number):
"""
>>> rotateRight(179487)
717948
>>> rotateRight(428571)
142857
>>> rotateRight(52631578947368421)
15263157894736842
"""
k = str(number)
return int(k[-1] + k[:-1])
def parasitic(number):
rotated = rotateRight(number)
if not rotated % number:
return rotated // number
else:
return 0
该测试检查
number
是否可被右旋转获得的数字整除,如果是,则返回除数(//
运算符将结果四舍五入到最接近的整数,但是我们已经知道结果必须为整数)关于python - Python:寄生数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47021335/