코딩테스트

[C] combinationzero

갓 시작한 코린이 2022. 5. 26. 02:47

문제


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