일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 네트워크 관리사 2급
- 코딩테스트 연습
- 우테코
- 프로그래머스
- 싸피셜
- 백준위
- 백준
- SSAFY 7기
- SSAFYcial
- 싸피
- 코테
- 리얼클래스
- SSAFY
- html
- Java
- 신문 스크랩
- 구글
- 인앱결제
- 네트워크 관리사 2급 실기
- it 이슈
- 신문스크랩
- python
- KT
- 코딩테스트
- it 뉴스
- 카카오
- IT 트렌드
- java 객체지향 프로그래밍
- 네트워크 관리사
- IT 동향
Archives
- Today
- Total
개발자일걸요..?
1676번 팩토리얼 0의 개수 본문
728x90
반응형
문제링크 : www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
<문제 풀이 근거>
N이 500까지 들어올 수 있기 때문에 이를 계산한 값을 구해서 0의 개수를 세려면 변수형 선언이 어렵다.
따라서 뒷자리에 0을 만드는 10을 만들 수 있는 요소를 세는 편이 더 용이하다. 이는 1~N까지의 수들의 약수중 2와 5의 개수를 세는 것을 통해 구할 수 있다.
<알고리즘>
1) 1~N까지 돌면서 2혹은 5의 배수인 수를 찾는다
2) 해당 수의 약수에 2의 개수와 5의 개수를 구한다.
3) 2*5 짝의 개수만큼 0이 생기므로 2의 개수와 5의 개수중 작은 수를 출력
#include <iostream>
#include <string>
using namespace std;
int main() {
int N = 0;
cin >> N;
int count_2 = 0;
int count_5 = 0;
for (int i = 1; i <= N; i++) {
int temp = i;
bool flag = false;
while (true) {
if ((temp % 2 == 0) || (temp % 5 == 0)) {
if (temp % 2 == 0) {
++count_2;
temp /= 2;
}
else if (temp % 5 == 0) {
++count_5;
temp /= 5;
}
}
else break;
}
}
cout << ((count_2 >= count_5) ? count_5 : count_2) << "\n";
return 0;
}
+) 참고 : myblog.opendocs.co.kr/archives/1230
[C++ 정리] 자료형의 크기 및 범위 | Opendocs
__int64 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
myblog.opendocs.co.kr
반응형
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
1010번 다리놓기 (0) | 2021.02.16 |
---|---|
2004번 조합 0의 개수 (0) | 2021.02.15 |
11051번 이항계수2 (0) | 2021.02.14 |
11050번 이항계수1 (0) | 2021.02.14 |
3036번 링 (0) | 2021.02.14 |
Comments