I don’t know how to get over this problem with while loop. So basically I want to return the number of zeros at the end of a number’s factorial.
import math def zeros(n): total_zero = 0 n = math.factorial(n) while str(n)[-1] == '0': # to check if the last number is 0 or not n = n * 0.1 total_zero += 1 return total_zero output = zeros(30) print(output)
After the while loop runs only 1 time, it breaks; I don’t know why.
Help would be very appreciated. Thanks!
Advertisement
Answer
After multiplying your value by 0.1
it becomes a float
, and it’s string representation becomes the scientific notation 2.6525285981219107e+31
which doesn’t end by a 1
You’d better do the integer division by 10 to keep an int
def zeros(n): total_zero = 0 n = math.factorial(n) while str(n)[-1] == '0': # to check if the last number is 0 or not n = n // 10 total_zero += 1 print(f"testting {str(n)}") return total_zero >> zeros(30) testting 26525285981219105863630848000000 testting 2652528598121910586363084800000 testting 265252859812191058636308480000 testting 26525285981219105863630848000 testting 2652528598121910586363084800 testting 265252859812191058636308480 testting 26525285981219105863630848 7
Better You can also use str.rstrip
: you remove the leading zeros and check the length difference
def zeros(n): value = str(math.factorial(n)) return len(value) - len(value.rstrip("0"))