Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 숫자의 계승에서 후행 0 계산

<시간/>

입력으로 정수가 주어집니다. 목표는 해당 숫자에 대해 계산된 계승에서 후미 0의 수를 찾는 것입니다. 숫자 N의 계승은 [1, N] 범위에 있는 모든 숫자의 곱입니다.

숫자가 10의 배수이거나 요인 쌍(2,5)이 있는 경우에만 후행 0을 얻는다는 것을 알고 있습니다. 5보다 큰 수의 모든 계승에서 해당 수의 소인수분해에서 5보다 큰 2가 있습니다. 숫자를 5의 거듭제곱으로 나누면 해당 인수에서 5의 개수를 알 수 있습니다. 따라서 5의 숫자는 뒤에 오는 0의 수를 알려줍니다.

예를 들어

입력

number=6

출력

Count of trailing zeros in factorial of a number are: 1

설명

The factorial is 30.
Prime factors of 30 : 2 * 3 * 5
So only one pair of (2,5) exists so trailing zeros is 1.

입력

number=12

출력

Count of trailing zeros in factorial of a number are: 2

설명

The factorial is 479001600.
Prime factors of 479001600 : 210 x 35 x 52 x 71 x 111
So we can get 2 pairs of (2,5) so trailing zeros are 2

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

이 접근 방식에서는 숫자를 5의 거듭제곱으로 나눕니다. 결과가 1보다 크면 뒤에 오는 0의 수는 5의 수가 됩니다. 이것을 추가하여 계산하십시오.

  • 정수를 입력하세요.

  • 함수 trailing_zeros(int number)는 숫자를 받아 후행 0의 개수를 숫자의 계승으로 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • for 루프를 사용하여 숫자를 5의 거듭제곱으로 나눕니다.

  • number/i가 1보다 크면 이 값을 추가하여 계산합니다.

  • 루프의 끝에서 결과로 카운트를 반환합니다.

예시

#include <iostream>
using namespace std;
int trailing_zeros(int number){
   int count = 0;
   for (int i = 5; number / i >= 1; i *= 5){
      int temp = number / i;
      count = count + temp;
   }
   return count;
}
int main(){
   int number = 50;
   cout<<"Count of trailing zeros in factorial of a number are: "<<trailing_zeros(number);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Count of trailing zeros in factorial of a number are: 12