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 |