- 문제
(mn)의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.
//시간 제한: 2초, 메모리 제한: 128MB
- 입력
첫째 줄에 정수 n, m (0≤m≤n≤2,000,000,000, n=0)이 들어온다.
- 출력
첫째 줄에 (mn)의 끝자리 0의 개수를 출력한다.
#include<iostream>
using namespace std;
long long int n, m, nFiveCnt, nmFiveCnt, mFiveCnt, nTwoCnt, nmTwoCnt, mTwoCnt, a, b;;
long long int FiveCnt(long long int o, long long int k) {
long long int cnt = 0;
cnt = o / k;
return cnt;
}
long long int TwoCnt(long long int o, long long int k) {
long long int cnt = 0;
cnt = o / k;
return cnt;
}
int main() {
cin >> n >> m;
if (m == 0) {
cout << 0;
return 0;
}
for (long long int i = 2; i <= n; i *= 2) {
nTwoCnt += TwoCnt(n, i);
}
for (long long int i = 5; i <= n; i *= 5) {
nFiveCnt += FiveCnt(n, i);
}
for (long long int i = 2; i <= n - m; i *= 2) {
nmTwoCnt += TwoCnt(n - m, i);
}
for (long long int i = 5; i <= n - m; i *= 5) {
nmFiveCnt += FiveCnt(n - m, i);
}
for (long long int i = 2; i <= m; i *= 2) {
mTwoCnt += TwoCnt(m, i);
}
for (long long int i = 5; i <= m; i *= 5) {
mFiveCnt += FiveCnt(m, i);
}
a = nTwoCnt - nmTwoCnt - mTwoCnt;
b = nFiveCnt - nmFiveCnt - mFiveCnt;
if (a <= b)
cout << a;
else
cout << b;
}
풀이