Coding Problem/백준

[백준] 1676 - 팩토리얼 0의 개수

마탁이 2021. 5. 31. 19:57

https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

  • 오래전에 2와 5의 약수 개수를 이용해 C로 풀었다.
  • 이번엔 파이썬으로 다른 방식을 활용해 풀었다.

C++

더보기
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stdlib.h>
#include <algorithm>
#include <string.h>
#include <cmath>

#define MINSIZE 1
#define MAXSIZE 1

using namespace std;



int main()
{
	int N;
	scanf("%d", &N);

	//10의 개수로 결정됨
	//(1,2,5,10)

	int cnt = 0;

	//팩토리얼 계산
	/*long long factorial_num = 1;
	for (int i = 1; i <= N; i++) {
		factorial_num *= i;
	}
	printf("%lld\n", factorial_num);*/

	//각 수의 약수에서 2와 5의 쌍이 나올때 +1
	//10이 나올때 +1
	
	//2와 5의 약수 개수
	int num_2 = 0;
	int num_5 = 0;
	for (int n = 1; n <= N; n++) {
		//결국엔 5의 개수? 2가 모자라진 않음

		int temp = n;

		while (1) {
			if (temp % 5 != 0)
				break;

			else {
				if (temp % 5 == 0) {
					num_5++;
					temp = temp / 5;
				}
			}
		}
		
	}

	cnt += num_5;
	
	printf("%d\n", cnt);
	return 0;

}

 

  • Python
더보기
N = int(input())

nFact = 1
for val in range(1, N+1):
    nFact *= val
result = list(str(nFact))[::-1]

cnt = 0
for ch in result:
    if '0' != ch: break
    else: cnt += 1
print(cnt)

'Coding Problem > 백준' 카테고리의 다른 글

[백준] 5086 - 배수와 약수  (0) 2021.05.31
[백준] 3036 - 링  (0) 2021.05.31
[백준] 1037 - 약수  (0) 2021.05.31
[백준] 1010 - 다리놓기  (0) 2021.05.31
[백준] 1931 - 회의실 배정  (0) 2021.05.28