私の解答
n = int(input())
ans = 1
for i in range(2,n+1):
ans = ans * i
div_count = 0
while True:
if ans % 10 == 0:
ans //= 10
div_count += 1
else:
break
print(div_count)
前の2種類の問題の解答を組み合わせて作りました。解答例と比べて長すぎますね。
解答例
N = int(input())
count_zero = 0
while N > 0:
count_zero += N // 5
N //= 5
print(count_zero)
- 整数 N を受け取ります。また、末尾の 0 の個数を保持する変数を宣言します。
- N! の末尾に 0 がいくつ付くのかという問題は、N! が 10 で何回割れるのか、つまり N! を素因数分解すると 2 * 5 がいくつ出てくるのかという問題と同じであると考えられます。
- また、N! を素因数分解したとき、2 より 5 の方が出てくる頻度は少ないので、5 が何個含まれるのかを数えればよいことになります。
私は、このような考えは全く浮かびませんでした。。。