==== 소감 ==== 아직 미완성된 코드 입니다. 채점로봇 통과할 때까지는 ~~ ==== 코드 ==== {{{~cpp // no10042 - Smith Numbers #include #include #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]