summaryrefslogtreecommitdiff
path: root/p4
diff options
context:
space:
mode:
Diffstat (limited to 'p4')
-rw-r--r--p4/CMakeLists.txt7
-rw-r--r--p4/main.c71
2 files changed, 78 insertions, 0 deletions
diff --git a/p4/CMakeLists.txt b/p4/CMakeLists.txt
new file mode 100644
index 0000000..ba228e5
--- /dev/null
+++ b/p4/CMakeLists.txt
@@ -0,0 +1,7 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+PROJECT(euler_problem4 C)
+INCLUDE_DIRECTORIES(../common)
+SET(SOURCES main.c ../common/utils.c)
+ADD_EXECUTABLE(p4 ${SOURCES})
+TARGET_LINK_LIBRARIES(p4 m)
+SET_SOURCE_FILES_PROPERTIES(${SOURCES} PROPERTIES COMPILE_FLAGS -g)
diff --git a/p4/main.c b/p4/main.c
new file mode 100644
index 0000000..0931535
--- /dev/null
+++ b/p4/main.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "utils.h"
+
+list_t *digits(int i)
+{
+ list_t *lst = NULL;
+
+ while (i > 0)
+ {
+ int digit = i % 10;
+ i = i / 10;
+ lst = list_append_int(lst, digit);
+ }
+
+ return lst;
+}
+
+int is_palindrome(int i)
+{
+ list_t *d = NULL;
+ int len = 0;
+ int j = 0;
+
+ if (i < 10)
+ return 1;
+
+ d = digits(i);
+ len = list_len(d);
+
+ // printf("i:%d\n", i);
+
+ for (j = 0; j < len/2; ++j)
+ {
+ int *a = (int*)list_get_n(d, j);
+ int *b = (int*)list_get_n(d, len-1-j);
+
+ // printf("a:%d b:%d\n", *a, *b);
+
+ if (*a != *b)
+ {
+ return 0;
+ }
+ }
+
+ list_free(d, list_free_int);
+
+ return 1;
+}
+
+int main(int argc, char **argv)
+{
+ int i, j;
+
+ for (i = 999; i >= 900; i--)
+ {
+ for (j = 999; j >= 900; j--)
+ {
+ int k = i*j;
+
+ if (is_palindrome(k))
+ {
+ printf("%d * %d = %d\n", i, j, k);
+ return 0;
+ }
+ }
+ }
+
+ return 0;
+} \ No newline at end of file