입력으로 정수가 주어집니다. 목표는 해당 숫자에 대해 계산된 계승에서 후미 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