From d29d92cabd15f9375c2ce96f2a32085158bab62e Mon Sep 17 00:00:00 2001 From: venkat-abhi Date: Mon, 7 Oct 2019 19:49:57 +0530 Subject: [PATCH] add calculator for last digit of nth fibonacci number --- last-digit-fibonacci.c | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 last-digit-fibonacci.c diff --git a/last-digit-fibonacci.c b/last-digit-fibonacci.c new file mode 100644 index 0000000..bc665d5 --- /dev/null +++ b/last-digit-fibonacci.c @@ -0,0 +1,43 @@ +#include +#include + +int last_digit_fib_optimized(const int index) +{ + int first = 0; + int second = 1; + int current = 0; + + for (int i = 2; i <= index; ++i) { + current = (first + second) % 10; + first = second; + second = current; + } + + return (current); +} + +/* This is the direct solution for reference */ +int last_digit_fib_naive(const int index) +{ + int *arr; + arr = (int *)malloc((index+1) * sizeof(int)); + arr[0] = 0; + arr[1] = 1; + + for (int i = 2; i <= index; ++i) { // store only the last digit of each index + arr[i] = (arr[i - 1] + arr[i - 2]) % 10; + } + + int res = arr[index]; + return (res); +} + +int main(int argc, char **argv) +{ + int index = 0; + scanf("%d", &index); + + printf("%d\n", last_digit_fib_optimized(index)); + + return 0; +} \ No newline at end of file