https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
이 문제는 펙토리얼 계산 결과 뒷자리가 0인 경우 count를 증가시키면 된다.
하지만 처음에 팩토리얼의 연산 결과를 모두 구한 후 string으로 변환 시켜 뒤의 자리부터 검사하는 방법을 사용하였다.
하지만 이 경우는 자료형의 크기 문제 때문에 실패하였다.
따라서 2의 배수보다 5의 배수가 항상 적다는 공식을 사용하고, 5의 배수를 5로 나눠지는지 확인하여
이 경우 0의 개수를 1 증가시키는 방식으로 문제를 해결하였다.
#include<iostream>
#include<vector>
using namespace std;
int calc(int num){
if(num == 0) return 0;
int len = 0;
for(int i = 1;i<=num;i++){
int count = i;
while(count >= 5){
if(count%5!=0) break;
count = count/5;
len += 1;
}
}
return len;
}
int main(){
int N;
cin>>N;
int result = calc(N);
cout<<result<<'\n';
}
'Baekjoon Review' 카테고리의 다른 글
[Silver 4] 1920번 수 찾기 (0) | 2023.10.05 |
---|---|
[Silver 2] 1874번 스택 수열 (0) | 2023.10.05 |
[Silver 2] 1654번 랜선 자르기 (0) | 2023.10.04 |
[Silver 5] 1436번 영화감독 숌 (0) | 2023.10.04 |
[Silver 5] 1181번 단어 정렬 (0) | 2023.10.03 |