반응형
문제
nCm의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 n, m(0≤m≤n≤2,000,000,000, n!=0)이 들어온다.
출력
첫째 줄에 0의 개수를 출력한다.
n!에서 곱해지는 5의 수를 찾기.
n을 5로 나누면 5의 배수 개수가 구해짐
n을 25로 나누면 25의 배수 개수가 구해짐
만약 25를 생각했을 때
25/5 는 5로 5,10,15,20,25 5개
25/25는 1로 25 1개
즉 5가 6번 곱해짐.
125는 25/125가 0으로 몫이 1보다 작아지므로 생략
25개 두번 세지지만 두번째 25에서는 1만 더해짐 즉 5가 곱해지면서 추가되는 5또한 1개씩 증가되므로 상관 없음.
#include <iostream>
#include <vector>
#include<queue>
#include <string>
#include<cmath>
#include<string.h>
#include <map>
#include<algorithm>
using namespace std;
long long int i;
int n, r;
int five = 0, two = 0;
int fiveCount(int num) {
int count = 0;
for (i = 5; num / i >= 1; i *= 5)
count += num / i;
return count;
}
int twoCount(int num) {
int count = 0;
for (i = 2; num / i >= 1; i *= 2)
count += num / i;
return count;
}
int main() {
cin >> n >> r;
five += fiveCount(n);
if (r != 0)five -= fiveCount(r);
if (n != r)five -= fiveCount(n - r);
two += twoCount(n);
if (r != 0)two -= twoCount(r);
if (n != r)two -= twoCount(n - r);
printf("%d\n", min(two, five));
return 0;
}
반응형
'Algorithm' 카테고리의 다른 글
[스택 단계] 백준 10828번 스택 (0) | 2020.09.30 |
---|---|
[수학 3 단계] 백준 2981번 검문 (0) | 2020.09.29 |
[수학 3 단계] 백준 1676번 팩토리얼 0의 개수 (0) | 2020.09.29 |
[수학 3 단계] 백준 9375번 패션왕 신해빈 (0) | 2020.09.29 |
[수학 3 단계] 백준 11051번 이항 계수 2 oo (0) | 2020.09.29 |