Study/Programming

BOJ 1676번 : 팩토리얼 0의 개수 / C언어

Csihyeon9 2024. 3. 29. 09:55
728x90

문제 : https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

[처음 작성한 코드... 시간초과...]

더보기

#include <stdio.h>

int main(void){
    int n, i;
    int fac = 1;
    int count = 0;
    
    scanf("%d", &n);
    
    for(i = 1; i <= n; ++i){
        fac *= i;
    }
    
    while(fac % 5 == 0){
        count++;
        fac /= 5;
    }

    printf("%d", count);
}


코드:

더보기

#include <stdio.h>

int main(void) {
    int n, i;
    int count = 0; // 5로 나누어 떨어지는 수의 개수를 저장하는 변수

    // 사용자로부터 정수를 입력받음
    scanf("%d", &n);

    // 5의 배수들이 등장하는 횟수를 계산하는 루프
    // i는 5의 배수를 의미하며, i를 5씩 곱해가면서 5의 배수들을 확인함
    // 예를 들어, n이 100이라면, 5, 10, 15, 20, ..., 100까지의 5의 배수들을 확인
    // 각각의 5의 배수는 5로 나누었을 때 몫이 등장하는 횟수를 의미함
    // 5의 제곱수(25, 50, 75, 등)의 경우, 각 배수에 대해 한 번 더 5로 나누어야 함
    // 이를 통해 등장하는 5의 배수들의 개수를 세고, count 변수에 더해줌
    for (i = 5; i <= n; i *= 5) {
        count += n / i;
    }

    // 결과 출력
    printf("%d", count);
    return 0;
}

 

728x90