문제
n명의 사람중 m명을 순서에 상관없이 뽑는 경우의 수를 조합이라고 하며 nCm으로 나타낸다.
nCm은 수식으로 n!/m!(n-m)! 으로 구할 수 있다. (5! = 1 * 2 * 3 * 4 * 5)
n과 m이 주어졌을때 nCm의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 n, m(0≤m≤n≤1,000,000)이 들어온다.
출력
첫째 줄에 0의 개수를 출력한다.
예제 입력
25 12
예제 출력
2
#include <stdio.h>
int main() {
//Please Enter Your Code Here
int n,m;
int count2=0;
int count5=0;
scanf("%d %d",&n,&m);
// n! 일때
for(int i=2;i<=n;i++)
{
int num=i;
while(num%2==0 || num%5==0)
{
if(num%2==0)
{
count2++; //분자이므로 ++
num=num/2;
}
else if(num%5==0)
{
count5++; //분자이므로 ++
num=num/5;
}
}
}
// m! 일때
for(int i=2;i<=m;i++)
{
int num=i;
while(num%2==0 || num%5==0)
{
if(num%2==0)
{
count2--; //분모이므로 --
num=num/2;
}
else if(num%5==0)
{
count5--; //분모이므로 --
num=num/5;
}
}
}
// (n-m)! 일때
for(int i=2;i<=n-m;i++)
{
int num=i;
while(num%2==0 || num%5==0)
{
if(num%2==0)
{
count2--; //분모이므로 --
num=num/2;
}
else if(num%5==0)
{
count5--; //분모이므로 --
num=num/5;
}
}
}
//2의 개수와 5의 개수 둘 중 작은 수가 10의 개수 즉 0의개수임
if(count2>count5) printf("%d",count5);
else printf("%d",count2);
return 0;
}
'코딩테스트' 카테고리의 다른 글
[C] fmttalpha (0) | 2022.05.26 |
---|---|
[C] streetree (0) | 2022.05.26 |
[C] combinationpascal (0) | 2022.05.26 |
[C] fractionsum (0) | 2022.05.26 |
[C] PROSJEK (0) | 2022.05.26 |