5와 2가 나올 수 있는 최소 개수를 구하면 풀 수 있는 문제다.
만약 5로 나눈다면 처음 나눴을 때는 5의 개수
두 번 나눴을 때는 5^2의 개수
세 번 나눴을 때는 5^3의 개수를 구할 수 있다.
이렇게 순서대로 구해 조합 0의 개수를 구했다.
#include <iostream>
int countCheck(long long val, int div) {
int count = 0;
while (val > 1) {
count += val / div;
val /= div;
}
return count;
}
int main(void) {
long long n, m;
std::cin >> n >> m;
long long fiveCnt, twoCnt;
long long plusCount, minusCount;
plusCount = countCheck(n, 5);
minusCount = countCheck(m, 5) + countCheck(n - m, 5);
fiveCnt = plusCount - minusCount;
plusCount = countCheck(n, 2);
minusCount = countCheck(m, 2) + countCheck(n - m, 2);
twoCnt = plusCount - minusCount;
long long count = (fiveCnt > twoCnt) ? twoCnt : fiveCnt;
std::cout << count << "\n";
return 0;
}
|
cs |
'problem solving' 카테고리의 다른 글
2331번: 반복수열 (0) | 2020.03.01 |
---|---|
2089번: -2진수 (0) | 2020.02.27 |
1517번: 버블 소트 (0) | 2020.02.24 |
1991번: 트리 순회 (0) | 2020.02.23 |
1929번: 소수 구하기 (0) | 2020.02.23 |