일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 자료 구조
- 4월
- 코딩 테스트
- 유니티
- 6월
- 수학
- 유니티 심화과정
- 2024년
- 코딩 기초 트레이닝
- todolist
- 다이나믹 프로그래밍
- 골드메탈
- 2022년
- 2025년
- c++
- 2월
- 단계별로 풀어보기
- 기초
- 개인 프로젝트
- 게임 엔진 공부
- 개인 프로젝트 - 런앤건
- 프로그래머스
- 백준
- 입문
- 2023년
- 5월
- C/C++
- 10월
- 1월
- 3월
- Today
- Total
기록 보관소
[Baekjoon/백준] 1676번: 팩토리얼 0의 개수(C/C++) 본문
단계별로 풀어보기 17단계(정수론 및 조합론) 11번 문제
https://www.acmicpc.net/step/18
정수론 및 조합론 단계
N개의 물건 중 순서를 고려하지 않고 K개를 고르는 경우의 수, 이항 계수를 구하는 문제
www.acmicpc.net
백준 1676번: 팩토리얼 0의 개수
https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제 설명
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
입력과 출력
입력: 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)
출력: 첫째 줄에 구한 0의 개수를 출력한다.

접근 방법
이번 문제는 N을 입력받아 N!에서 나온 값의 끝자리 0의 개수를 출력하는 문제다. 예제 1번의 경우 결과값이 3628800이 나온다. 그래서 출력값이 2가 나오게 된다.
끝자리 0의 개수는 10의 약수인 2와 5의 개수 중 작은 것으로 알 수 있다. 이번 문제는 그냥 팩토리얼을 계산하므로 당연히 5가 더 적을 것이다. 따라서 5의 개수만 구하면 된다. 앞의 예제인 10의 경우 5, 10이 5의 배수가 된다. 그래서 2개가 출력된다. 하지만, 25의 경우 5의 배수가 5, 10, 15, 20, 25로 5개가 나올 것 같지만 결괏값이 15,511,210,043,330,985,984,000,000로 0이 6개다. 이경우에는 25가 5*5이므로 그렇다. 그래서 5를 나누는 것까지 고려해야한다. 즉, 팩토리얼 연산 중 5로 나눠서 0인 것과 그것을 또 5로 나눠서 나오는 5의 배수 개수를 출력하면 문제를 해결할 수 있다.
코드
#include <iostream>
using namespace std;
int main(int argc, char * argv[]) {
int N, count, temp, result = 0;
cin >> N;
for (int i = 1; i <= N; i++) {
count = 0;
temp = i;
while (1) {
if (temp % 5 == 0) {
count++;
temp /= 5;
}
else
break;
}
result += count;
}
cout << result << endl;
return 0;
}
결과

'코딩 테스트 > 백준' 카테고리의 다른 글
[Baekjoon/백준] 10773번: 제로(C/C++) (0) | 2022.04.08 |
---|---|
[Baekjoon/백준] 2004번: 조합 0의 개수(C/C++) (0) | 2022.04.06 |
[Baekjoon/백준] 9375번: 패션왕 신해빈(C/C++) (0) | 2022.04.02 |
[Baekjoon/백준] 1010번: 다리 놓기(C/C++) (0) | 2022.04.01 |
[Baekjoon/백준] 11051번: 이항 계수 2(C/C++) (0) | 2022.03.30 |