[백준/C++] 1676번 팩토리얼 0의 개수
2021. 2. 13. 15:19ㆍ알고리즘/DP
728x90
반응형
문제: www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제풀이
입력 N에 대하여 N! 이 일의 자리부터 처음 0이 아닌 숫자가 나올 때까지의 0의 개수를 구하는 문제이다.
0의 개수는 N! 를 소인수 분해해서 성분 2와 5의 개수를 구한 다음 둘 중 더 작은 것의 개수를 출력하면 된다.
코드
#include <iostream>
using namespace std;
struct tf{ //2와 5의 개수
int two;
int five;
};
int func2(int num){ //2의 개수 구하기
int cnt2 = 0;
while(num%2==0){
num /= 2;
cnt2++;
}
return cnt2;
}
int func5(int num){ //5의 개수 구하기
int cnt5 = 0;
while(num%5==0){
num /= 5;
cnt5++;
}
return cnt5;
}
int main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
int N;
cin>>N;
tf arr[501]; //0<=N<=500 이므로 501까지 선언
for(int i=1; i<=N; i++){ //N까지의 숫자 각각 2와 5의 성분 개수를 구해준다.
arr[i].two = func2(i);
arr[i].five = func5(i);
}
int sum2=0, sum5=0;
for(int i=1; i<=N; i++){ //팩토리얼이므로 성분 개수를 2, 5 각각 모두 더해준다.
sum2 += arr[i].two;
sum5 += arr[i].five;
}
cout<<min(sum2, sum5); //둘 중 작은 것 출력
return 0;
}
결과
728x90
반응형
'알고리즘 > DP' 카테고리의 다른 글
[백준/C++] 11727번 2×n 타일링 2 (0) | 2021.02.17 |
---|---|
[백준/C++] 11726번 2×n 타일링 (0) | 2021.02.17 |
[백준/C++] 9461번 파도반 수열 (0) | 2021.02.17 |
[백준/C++] 1003번 피보나치 함수 (0) | 2021.02.13 |