Максимально допустимое число

Здравствуйте, уважаемые форумчане!

Не смог придумать, как же наиболее просто определить максимальное число Фибоначчи, которое умещается в переменную типа ULL int (в данном случае - в элемент массива).

Как я понял, то если в переменную того или иного типа данных ввести значение, выходящее за пределы допустимого диапазона, то произойдёт переполнение переменной. В результате таких переполнений машина производит необходимые вычисления для того, чтобы введённое пользователем значение всё-таки оказалось представимым. Но, разумеется, представляет оно совсем не то, что хочется)

Анализировал вывод чисел в консоли: здравый смысл подсказывал, что каждое следующее число Фибоначчи явно не должно иметь меньше разрядов, чем предыдущее (да и просто не должно быть меньше его или равным ему). А, учитывая то, что какое-то число таки должно выйти за пределы максимального значения ULL int (~18*10^18), то такое число как раз нашлось.

Прописал код (оператор if в теле цикла for). Ну и вопрос: как сделать проще? Подскажите, пожалуйста!

CВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

int main(void)
{
int i, numFib, res;
printf("How many Fibonacci's numbers do you want? Enter the value...");
scanf("%i", &numFib);
unsigned long long int massFib[numFib];
   massFib[0]=0;
   massFib[1]=1;
 
    for(i=2; i<numFib; ++i)
    {
        massFib[i]=massFib[i-2]+massFib[i-1];
        if(massFib[i]<massFib[i-1]) // вычисление наибольшего допустимого значения числа Фибоначчи
        {
            printf("Wrong number = n%llunMax number for ULL-type = n%llunCounter number = %in", massFib[i], massFib[i-1], i-1);
            // вывод i-того элемента и (i-1)-того для сравнения + вывод порядкового номера числа Фибоначчи
            --i;
            break;
        }
    }
 
res = i;
 
    for(i=0; i<=res; ++i)
        printf("%llu n", massFib[i]);
 
 
    return 0;
}