diff --git a/c/binaries/euler001 b/c/binaries/euler001 new file mode 100755 index 0000000..f29eba9 Binary files /dev/null and b/c/binaries/euler001 differ diff --git a/c/euler.c b/c/euler.c new file mode 100644 index 0000000..190cf78 --- /dev/null +++ b/c/euler.c @@ -0,0 +1,5 @@ +#include + +void print_result(int result) { + printf("%d\n", result); +} diff --git a/c/euler.h b/c/euler.h new file mode 100644 index 0000000..540c9a1 --- /dev/null +++ b/c/euler.h @@ -0,0 +1 @@ +void print_result(int result); diff --git a/c/euler001.c b/c/euler001.c new file mode 100644 index 0000000..bec72a1 --- /dev/null +++ b/c/euler001.c @@ -0,0 +1,14 @@ +#include "euler.h" + +int main() +{ + int sum = 0; + for (int i = 0; i < 1000; i++) { + if (i % 3 == 0 || i % 5 == 0) { + sum += i; + } + } + + print_result(sum); + return 0; +} diff --git a/c/euler002 b/c/euler002 new file mode 100755 index 0000000..e0cb859 Binary files /dev/null and b/c/euler002 differ diff --git a/c/euler002.c b/c/euler002.c new file mode 100644 index 0000000..b8a984b --- /dev/null +++ b/c/euler002.c @@ -0,0 +1,29 @@ +#include "euler.h" +#include "int_list.h" +#include + +int_list *fibonacci_until(int num) +{ + + static int_list list; + int_list_init(&list); + + int term_one = 1; + int term_two = 2; + while (term_one < num) + { + if (term_one % 2 == 0) { int_list_add(&list, term_one); } + int temp = term_two; + term_two = term_two + term_one; + term_one = temp; + } + return &list; +} + +int main() +{ + int_list *result; + result = fibonacci_until(4000000); + print_result(int_list_sum(result)); + return 0; +} diff --git a/c/int_list.c b/c/int_list.c new file mode 100644 index 0000000..3fe1167 --- /dev/null +++ b/c/int_list.c @@ -0,0 +1,82 @@ +#include +#include +#include +#include "int_list.h" + +void int_list_init(int_list *l) { + l->data = NULL; + l->size = 0; + l->count = 0; +} + +int int_list_count(int_list *l) { + return l->count; +} + +void int_list_add(int_list *l, int value) { + if (l->size == 0) { + l->size = 10; + l->data = malloc(sizeof(int*) * l->size); + memset(l->data, '\0', sizeof(int*) * l->size); + } + + if (l->size == l->count) { + l->size *= 2; + l->data = realloc(l->data, sizeof(int*) * l->size); + } + + l->data[l->count] = value; + l->count++; +} + +int int_list_get(int_list *l, int index) { + if (index >= l->count) { + printf("error: index out of range"); + return 0; + } + + return l->data[index]; +} + +void int_list_set(int_list *l, int index, int value) { + if (index >= l->count) { + printf("error: index out of range"); + return; + } + + l->data[index] = value; +} + +void int_list_delete(int_list *l, int index) { + if (index >= l->count) { + printf("error: index out of range"); + return; + } + + int j = index; + for (int i = index; i < l->count; i++) { + l->data[j] = l->data[i]; + j++; + } + + l->count--; +} + +int int_list_sum(int_list *l) { + int sum = 0; + for (int i = 0; i < l->count; i++) { + sum += (l->data[i]); + } + return sum; +} + +void int_list_print(int_list *l) { + for (int i = 0; i < l->count; i++) { + printf("%d ", (l->data[i])); + } + printf("\n"); +} + +void int_list_free(int_list *l) { + free(l->data); +} diff --git a/c/int_list.h b/c/int_list.h new file mode 100644 index 0000000..4d24fb9 --- /dev/null +++ b/c/int_list.h @@ -0,0 +1,20 @@ +#ifndef INT_LIST_H_ +#define INT_LIST_H_ + +typedef struct int_list_ { + int* data; + int size; + int count; +} int_list; + +void int_list_init(int_list *l); +int int_list_count(int_list *l); +void int_list_add(int_list *l, int value); +int int_list_get(int_list *l, int index); +void int_list_set(int_list*l, int index, int value); +void int_list_delete(int_list *l, int index); +int int_list_sum(int_list *l); +void int_list_print(int_list *l); +void int_list_free(int_list *l); + +#endif