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
관리 메뉴

아무거나 내꺼 공부할래

뒤집은 소수 / c / 제한시간 없음 본문

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

뒤집은 소수 / c / 제한시간 없음

mero95 2021. 1. 16. 13:37

▣ 문제

- N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫자리부터의 연속된 0은 무시한다. 뒤집는 함수인 int reverse(int x) 와 소수인지를 확인하는 함수 bool isPrime(int x)를 반드시 작성하여 프로그래밍 한다.

 

▣ 입력설명

- 첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 100,000를 넘지 않는다.

 

▣ 출력설명

- 첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.

 

▣ 입력 예시

5
32 55 62 3700 250

▣ 출력 예시

23 73

 

<내 코드>

#pragma warning(disable:4996)
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
int reverse(int x) {
	int digit[7] = { 0 };
	int res = 0;
	int temp;
	int cnt = 0;
	int d;
	while (x / 10 != 0) {
		temp = x % 10;
		digit[cnt++] = temp;
		x = x / 10;
	}
	digit[cnt++] = x;
	d = cnt;
	for (int i = 0; i < cnt; i++) {
		res = res + digit[i] * pow(10, d - 1);
		d--;
	}
	return res;
}

bool isPrime(int x) {
	bool check = true;
	for (int i = 2; i < x; i++) {
		if (x % i == 0) check = false;
	}
	if (x == 1) check = false;
	
	return check;
}

int main() {
	int n;
	int num[101];
	int temp;
	int res[101] = { 0 };
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &num[i]);
	}
	for (int i = 0; i < n; i++) {
		if (isPrime(reverse(num[i]))) printf("%d ", reverse(num[i]));
	}
	return 0;
}

 

<수정한 코드>

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

int reverse(int x) {
	int res = 0;
	int temp;

	while (x > 0) {
		temp = x % 10;
		res = res * 10 + temp;
		x = x / 10;
	}
	return res;
}

bool isPrime(int x) {
	bool check = true;
	for (int i = 2; i < x; i++) {
		if (x % i == 0) check = false;
	}
	if (x == 1) check = false;
	
	return check;
}

int main() {
	int n;
	int num;
	int temp;
	
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &num);
		temp = reverse(num);
		if (isPrime(temp)) printf("%d ", temp);
	}

	return 0;
}

 

코드짤때 아무 생각 없이 변수 늘리지 말자...