Files
lab0_letsbegin/fib.c
2025-11-23 23:09:17 +03:00

53 lines
1.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int fib(int n) {
if (n < 0) {
return -1;
}
if (n == 0) return 0;
if (n == 1) return 1;
int a = 0;
int b = 1;
int c;
for (int i = 2; i <= n; i++) {
if (b > INT_MAX - a) {
return INT_MIN;
}
c = a + b;
a = b;
b = c;
}
return b;
}
int main(void) {
int n;
printf("Введите целое неотрицательное n: ");
if (scanf("%d", &n) != 1) {
fprintf(stderr, "Ошибка ввода: ожидалось целое число.\n");
return EXIT_FAILURE;
}
int result = fib(n);
if (n < 0) {
fprintf(stderr, "Ошибка: n должно быть неотрицательным.\n");
return EXIT_FAILURE;
}
if (result == INT_MIN) {
fprintf(stderr, "Ошибка: переполнение при вычислении fib(%d). "
"Значение фибоначчи слишком велико для типа int.\n", n);
return EXIT_FAILURE;
}
printf("fib(%d) = %d\n", n, result);
return EXIT_SUCCESS;
}