소ê°� ¶
ì•„ì§� 미완성ë�œ 코드 입니다. 채ì �로봇 í†µê³¼í• ë•Œê¹Œì§€ëŠ” ~~
코드 ¶
~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
----
SmithNumbers AOI










