U E D R , A S I H C RSS

Smith Numbers/��현

소�

아� 미완성� 코드 입니다. 채�로봇 통과할 때까지는 ~~

코드

~cpp
// no10042 - Smith Numbers
#include <stdio.h>
#include <string.h>
#define ArSize 30
int digit_separation(int, int, int*);
void prime_factor(int, int*);
int prime(int);		/* 소수 : 200, 소수 아님 : 100 */
int arr_add(int*);

int main(void)
{
	int arr_separation[ArSize] = { 0 }, arr_prime[ArSize] = { 0 };
	int arr_separation_prime[ArSize] = { 0 };
	int input_number, input_case, i, j, k;
	scanf("%d", &input_number);
	for (i = 0; i < input_number; i++)
	{
		scanf("%d", &input_case);
		for (j = input_case + 1; j < 1000000000; j++)
		{
			/* 소수 체� */
			if (prime(j) == 100)
			{
				/* 소�수 분해 후 다시 개개� 숫�로 분리 */
				prime_factor(j, arr_prime);
				for (k = 0; k < ArSize; k++)
				{
					// � �리 ��� 때
					if (arr_prime[k] >= 10)
						k = digit_separation(k, arr_prime[k], arr_separation_prime);
					else
						arr_separation_prime[k] = arr_prime[k];
				}
				/* 입력값 � �리 배열 */
				digit_separation(0, j, arr_separation);

				/* 입력값� 소�수 분해값들� 합과 입력값 개개� 합 비�*/
				if (arr_add(arr_separation_prime) == arr_add(arr_separation))
				{
					printf("%dn", j);
					break;
				}
				/* 배열 초기화 */
				for (i = 0; i < ArSize; i++)
				{
					arr_separation[i] = 0 ;
					arr_prime[i] = 0;
					arr_separation_prime[i] = 0;
				}
			}
		}
	}
	return 0;
}

/* 입력받� 숫�를 하나씩 분리하여 배열� 저장 */
int digit_separation(int start_index, int num, int *array)
{
	/* 입력 받� 숫�를 문�열로 저장하기 위한 ��터 */
	char string[ArSize];
	int i, size;
	// int형 num를 10진 정수형�으로 char형 string배열� 저장
	sprintf(string, "%d", num);
	size = strlen(string);

	/* 문�열로 저장� 수를 아스키코드 값� 변환하여 array� 저장한다. */
	for (i = 0 + start_index; i < size + start_index; i++)
		array[i] = string[i - start_index] - '0';
	return size + start_index;
}

/* 입력받� 숫� 소�수 분해 */
void prime_factor(int num, int *array)
{
	int i, j, temp;
	temp = num;
	for (i = 2, j = 0; i < num, j < ArSize;)
	{
		/* ��� 소�수분해 할 것� 없으면 */
		if (temp == 1)
			break;
		/* 소�수분해가 가능하면 */
		if (temp % i == 0)
		{
			/* 배열� 저장한다. */
			array[j] = i;
			temp /= i;
			j++;
		}
		else
			i++;
			continue;
	}
}

/* 소수 �별 - 소수 �면 : return 1, 소수가 아니면 : return 2 */
int prime(int num)
{
	int i;
	for (i = 2; i < num; i++)
	{
		/* 소수가 아니면 */
		if (num % i == 0)
			return 100;
	}
	/* 소수 �면 */
	return 200;
}
/* 배열 �셈 */
int arr_add(int *array)
{
	int i, total = 0;
	for (i = 0; i < ArSize; i++)
		total += array[i];
	return total;
}

�글

uva사�트� 등�할때 e-mail� �었다면, e-mail로 컴파� �러가 곳(?)� 로봇� 바로 보내�니다. 참고하세요. 단, 한메�� 스팸편지함� 확�해 보세요. -보창
----
SmithNumbers AOI
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:04
Processing time 0.0041 sec