https://www.acmicpc.net/problem/3474
t=int(input())
for tc in range(t):
n=int(input())
answer=0
for i in range(1,n):
k=5**i
if k>n:
break
else:
answer+=n//k
print(answer)
import java.util.*;
import java.lang.*;
import java.io.*;
// The main method must be in a class named "Main".
class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int tc=sc.nextInt();
for(int t=0;t<tc;t++){
int answer=0;
int n=sc.nextInt();
for(int i=1;i<n;i++){
long k=(long)Math.pow(5,i);
if(k>n){
break;
}else{
answer+=(long)(n/k);
}
}
System.out.println(answer);
}
}
}
팩토리얼의 끝에 있는 0의 개수를 구하려면 각 자리가 10의 배수로 나누어지는지 알아야 합니다. 10은 2와 5의 곱인데, n!의 경우 2의 개수가 항상 5의 개수보다 많으므로 5의 개수만 세면 됩니다.
n보다 작은 5의 거듭제곱으로 나누어 떨어지는 수의 개수를 구하면 됩니다. 예를 들어, 5로 나누어진 몫, 25로 나누어진 몫 등을 구하여 합하면 됩니다.
반복문을 사용하여 5의 거듭제곱으로 나누어 떨어지는 수를 구하고, 이를 반복하여 더해주는 방식으로 효율적으로 해결할 수 있습니다.
이렇게 Python과 Java로 백준 3474번 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊