Implement factorial and count trailing zeros
Company: Upstart
Role: Data Scientist
Category: Coding & Algorithms
Difficulty: easy
Interview Round: Onsite
Quick Answer: This question evaluates understanding of factorial computation and algorithmic techniques, including iterative versus recursive approaches, handling large integers and recursion constraints, and efficient counting of trailing zeros via number-theoretic reasoning.
Part 1: Implement Factorial
Constraints
- 0 <= n <= 2000
- n is an integer
- Do not use math.factorial or other built-in factorial helpers
Examples
Input: 0
Expected Output: 1
Explanation: By definition, 0! = 1.
Input: 1
Expected Output: 1
Explanation: 1! is also 1.
Input: 5
Expected Output: 120
Explanation: 5! = 1 * 2 * 3 * 4 * 5 = 120.
Input: 10
Expected Output: 3628800
Explanation: 10! = 3628800.
Input: 20
Expected Output: 2432902008176640000
Explanation: This checks that the solution handles larger integer results correctly.
Solution
def solution(n):
result = 1
for i in range(2, n + 1):
result *= i
return resultTime complexity: O(n) multiplication steps. Space complexity: O(1) auxiliary space, excluding the size of the output integer.
Hints
- Start with result = 1, then multiply by every integer from 2 through n.
- Remember the edge cases: 0! = 1 and 1! = 1. Iteration avoids recursion stack limits.
Part 2: Count Trailing Zeros of a Factorial
Constraints
- 0 <= n <= 10^18
- n is an integer
- Do not compute n! directly
Examples
Input: 0
Expected Output: 0
Explanation: 0! = 1, which has no trailing zeros.
Input: 3
Expected Output: 0
Explanation: 3! = 6, so there are no trailing zeros.
Input: 5
Expected Output: 1
Explanation: 5! = 120, which ends with one zero.
Input: 25
Expected Output: 6
Explanation: Count factors of 5: floor(25/5) = 5 and floor(25/25) = 1, so total = 6.
Input: 100
Expected Output: 24
Explanation: floor(100/5) + floor(100/25) = 20 + 4 = 24.
Solution
def solution(n):
count = 0
while n > 0:
n //= 5
count += n
return countTime complexity: O(log_5 n). Space complexity: O(1).
Hints
- A trailing zero is created by a factor of 10, which is 2 * 5.
- In n!, factors of 2 are more common than factors of 5, so count how many times 5 appears in the prime factorization of n!.