Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
more
Archives
Today
Total
관리 메뉴

아무거나 내꺼 공부할래

N!에서 0의 개수 / c / 제한시간 없음 본문

[c언어&c++] 알고리즘 공부/인프런(Inflearn)

N!에서 0의 개수 / c / 제한시간 없음

mero95 2021. 1. 20. 16:14

▣ 문제

- 자연수 N이 입력되면 N! 값에서 일의 자리부터 연속적으로 ‘0’이 몇 개 있는지 구하는 프로그 램을 작성하세요. 만약 5! = 5 ×4 × 3 × 2 ×1 = 120으로 일의자리부터 연속적된 ‘0’의 개수는 1입니다. 만약 12! = 479001600으로 일의자리부터 연속적된 ‘0’의 개수는 2입니다.

 

▣ 입력설명

- 첫 줄에 자연수 N(10<=N<=1,000)이 입력된다.

 

▣ 출력설명

- 일의 자리부터 연속된 0의 개수를 출력합니다.

 

▣ 입력 예시

12


▣ 출력 예시

2

 

<내 코드>

#pragma warning(disable:4996)
#include<stdio.h>

int main() {
	int n;
	int cnt = 0;
	int num = 1;
	scanf("%d", &n);

	for (int i = 1; i <= n; i++) {
		num = num * i;
	}
	
	while (num % 10 == 0) {
		cnt++;
		num = num / 10;
	}
	printf("%d\n", cnt);

	return 0;
}

??

<수정한 코드>

#pragma warning(disable:4996)
#include<stdio.h>

int main() {
	int n, i, j, tmp, cnt1 = 0, cnt2 = 0;
	scanf("%d", &n);
	for (i = 2; i <= n; i++) {
		tmp = i;
		j = 2;
		while (1) {
			if (tmp % j == 0) {
				if (j == 2) cnt1++;
				else if (j == 5) cnt2++;
				tmp = tmp / j;
			}
			else j++;
			if (tmp == 1) break;
		}
	}
	if (cnt1 < cnt2) printf("%d\n", cnt1);
	else printf("%d\n", cnt2);
	return 0;
}


 

소인수들 중에서 2와 5의 개수 중에서 더 적은 숫자를 출력하는 코드

 

.