문제: https://www.acmicpc.net/problem/1564
해설:
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;
}
'Study > Programming' 카테고리의 다른 글
BOJ 2738번 : 행렬 덧셈 / C언어 (0) | 2024.03.28 |
---|---|
BOJ 11727번 : 2xn 타일링 2 / C언어 (0) | 2024.03.28 |
BOJ 11726번 : 2xn 타일링 / C언어 (0) | 2024.03.28 |
BOJ 11758번 : CCW / C언어 (0) | 2024.03.20 |
BOJ 2751번 : 수 정렬하기 2 / C언어 (0) | 2024.03.20 |