You are on page 1of 2

#include <stdio.

h>

void addArrays(int result[], int fib1[], int fib2[], int size) {


int carry = 0;
for (int i = size - 1; i >= 0; i--) {
result[i] = fib1[i] + fib2[i] + carry;
carry = result[i] / 10;
result[i] %= 10;
}
}

void copyArray(int dest[], int src[], int size) {


for (int i = 0; i < size; i++) {
dest[i] = src[i];
}
}

void printFibonacci(int n, int nResult[40]) {


int fib1[40] = {0};
int fib2[40] = {0};

fib1[39] = 0;
fib2[39] = 1;

printf("Thu Tu Giatri\n");
printf("1 %d\n", fib1[39]);

if (n > 1) {
printf("2 %d\n", fib2[39]);

for (int m = 3; m <= n; m++) {


addArrays(nResult, fib1, fib2, 40);
copyArray(fib1, fib2, 40);
copyArray(fib2, nResult, 40);

int k;
for (k = 0; k < 40; k++) {
if (nResult[k] != 0) {
break;
}
}

printf("%-9d", m);

for (int i = k; i < 40; i++) {


printf("%d", nResult[i]);
}

printf("\n");
}
}
}

void findLastFibonacci(int n, int nResult[40]) {


int fib1[40] = {0};
int fib2[40] = {0};
int m;

fib1[39] = 0;
fib2[39] = 1;

for (int i = 2; i < n; i++) {


addArrays(nResult, fib1, fib2, 40);
copyArray(fib1, fib2, 40);
copyArray(fib2, nResult, 40);
}
for (int i = 0; i < 39; i++){
if( nResult[i] != 0){
m = i;
break;
}
}

printf("\nSo Fibonacci cuoi cung trong day so la: ");


for (int i = m; i < 40; i++) {
printf("%d", nResult[i]);
}

printf("\n");
}

int main() {
int n;
printf("Nhap vao so nguyen duong n: ");
scanf("%d", &n);

if (n <= 0) {
printf("Vui long nhap so nguyen duong.\n");
return 1;
}

int nResult[40] = {0};


printFibonacci(n, nResult);

findLastFibonacci(n, nResult);

return 0;
}

You might also like