Programming
Study/Programming / / 2024. 3. 27. 10:35

BOJ 1564번 : 팩토리얼5 / C언어

728x90

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

 

1564번: 팩토리얼5

첫째 줄에 정수 N이 주어진다. N은 1,000,000보다 작거나 같다. 또, 9보다 크거나 같다.

www.acmicpc.net

 

해설:

1. 사용자로부터 정수 값을 입력받은 값을 `N`에 저장.
2. 1부터 `N`까지의 모든 수에 대해 반복문을 실행.
3. 각 반복에서 현재의 팩토리얼 값에 현재의 수(`i`)를 곱하여 팩토리얼을 계산.
4. 계산된 팩토리얼 값의 끝에 있는 0들을 제거하기 위해 `fuc()` 함수를 호출.
5. 팩토리얼 값이 너무 커지지 않도록, 중간 단계에서 나머지 연산을 수행.
6. 최종적으로 계산된 팩토리얼 값의 마지막 다섯 자리를 출력.


코드:

더보기

#include <stdio.h>

// 전역 변수 선언
int N, i;                   // N: 입력 받은 정수, i: 반복문에서 사용할 변수
long long int result = 1;   // 계산된 팩토리얼 값 저장
long long A;                // 나머지 연산에 사용할 값

// 팩토리얼 값의 끝에 있는 0을 제거하는 함수
void fuc() {
    while (result % 10 == 0) {
        result /= 10;
    }
}

int main() {
    // 사용자로부터 정수 입력 받음
    scanf("%d", &N);
    
    // 1부터 N까지 반복하여 팩토리얼 계산
    for (i = 1; i <= N; i++) {
        result *= i;    // 현재의 수를 곱하여 팩토리얼 값 계산
        fuc();          // 팩토리얼 값의 끝에 있는 0 제거
        A = 1000000000000;  // A에 1000000000000을 저장
        result %= A;    // 중간 단계에서 나머지 연산을 수행하여 결과가 너무 커지지 않도록 함
    }
    
    result %= 100000;   // 마지막 다섯 자리만 남기기 위해 나머지 연산 수행
    printf("%05lld", result);   // 결과 출력 (다섯 자리로, 부족한 자릿수는 0으로 채움)
    
    return 0;
}

728x90
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유