숫자 n이 있다고 가정합니다. m의 계승이 최소 n개의 0을 갖도록 최소 수 m을 찾아야 합니다.
따라서 입력이 n =2와 같으면 출력은 10이므로 10이 됩니다! =3628800과 9! =362880, 0이 2개인 최소 수는 10입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- count_fives() 함수를 정의합니다. n 소요됩니다.
- cnt :=0
- n> 0일 때 수행
- n :=(n / 5)의 바닥
- cnt :=cnt + n
- 반환 cnt
- 메인 방법에서 다음을 수행하십시오. -
- 왼쪽 :=1
- 맞음 :=5^24
- 오른쪽 - 왼쪽> 5 동안 do
- 중간 :=((오른쪽 + 왼쪽) / 10) * 5의 바닥
- 5:=count_fives(중간)
- 5가 n과 같으면
- 오른쪽 :=중간
- 왼쪽 :=오른쪽 - 5
- 루프에서 나오다
- 그렇지 않으면 5가
- 왼쪽 :=중간
- 그렇지 않으면
- 오른쪽 :=중간
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def count_fives(n):
cnt = 0
while n > 0:
n = n // 5
cnt += n
return cnt
def solve(n):
left = 1
right = 5**24
while right - left > 5:
mid = int((right + left) / 10) * 5
fives = count_fives(mid)
if fives == n:
right = mid
left = right - 5
break
elif fives < n:
left = mid
else:
right = mid
return right
n = 2
print(solve(n)) 입력
2
출력
10