/* * YOUR INFO HERE! */ // FINAL VERSION: // generalization for this function is not so good // req: 0 <= a,b,c < 10 inline int palindrom_5digit(int a, int b, int c){ int result; result = a*10001 + b*1010 + c*100; return result; } // req: 0 <= a,b,c < 10 inline int palindrom_6digit(int a, int b, int c){ int result; result = a*100001 + b*10010 + c*1100; return result; } // req: 100 <= x < 999 inline void extract_3digit(int x, int *a, int *b, int *c){ int y; y = x/10; *c = (x - y*10); x = y; y /= 10; *b = (x - y*10); x = y; y /= 10; *a = (x - y*10); } inline int extract_digit(int x, int *a){ int y=x/10; *a = (x - y*10); return y; } bool is_product_of_3digit_numbers(int n){ bool result = 0; for (int x = 100; x < 999; ++x){ if (n % x == 0){ int y = n / x; if (y >= 100 && y < 1000){ result = 1; break; } } } return result; } #ifdef EULER_PROBLEM // BUILDING AREA: struct Euler_In{}; struct Euler_Result{ int largest_palindrome; }; Euler_Result euler_main(Euler_In in){ int palindrome = -1; // check 6 digit for (int x = 999; x >= 100; --x){ int a,b,c,p; extract_3digit(x, &a, &b, &c); p = palindrom_6digit(a,b,c); if (is_product_of_3digit_numbers(p)){ palindrome = p; break; } } if (palindrome == -1){ // check 5 digit for (int x = 999; x >= 100; --x){ int a,b,c,p; extract_3digit(x, &a, &b, &c); p = palindrom_5digit(a,b,c); if (is_product_of_3digit_numbers(p)){ palindrome = p; break; } } } Euler_Result result; result.largest_palindrome = palindrome; return result; } void euler_print(Euler_Result answer, Euler_In in){ printf("%d\n", answer.largest_palindrome); } #if 0 #define EULER_CHECK bool euler_check(Euler_Result answer, Euler_In in){ bool result = 1; return result; } #endif #endif