Python деление на 10 - PullRequest
       15

Python деление на 10

2 голосов
/ 07 апреля 2020

Я хочу посчитать конечные нули факториала числа. Когда я делю число на 10, я ожидаю, что последний ноль будет удален, но это не так.

def fact(num):
    if (num==0 or num==1):
        return 1
    else:
        return num*fact(num-1)

def num(a):
    f = fact(a)
    count = 0
    while(f%10==0):
        count=count+1
        print(f)
        f=int(f/10)
        print(f)
    return count

n=int(input())
while(n!=0):
    a=int(input())
    print(num(a))
    n=n-1

Output

1 Ответ

1 голос
/ 07 апреля 2020

Вам необходимо заменить:

f=int(f/10)

на

f = f // 10

внутри num(). Это решит вашу проблему.


Объяснение:

f/10 преобразует число в float. И когда вы конвертируете это float в int, оно теряет точность в случае большого числа.

Вы можете подтвердить это следующим образом:

a = 8320987112741390144276341183223364380754172606361245952449277696409600000000000000

print(int(a/10)) # prints: 832098711274139031630889608027340070244161333703152098685794054394185233318543360

print(a//10) # prints: 832098711274139014427634118322336438075417260636124595244927769640960000000000000
...