通常,可以将正自然数乘以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/

10-09 08:03