C/C++中,斐波那契数列到第几位时超出int/u long long范围
分析:
我们知道斐波那契数列中的数均大于等于0,如果C=A+B(A >= 0, B >= 0),不妨令A >= B,一定有C/A >= 1。而如果C超出范围,无论是有符号类型,还是无符号类型,一定有C/A < 1。利用这一点,我们只需找出与前一位的商小于1的那一位即可,代码如下。
代码:
#include <stdio.h>
int a[100];
unsigned long long b[100];
int main(){
int i;
a[0] = b[0] = 0;
a[1] = b[1] = b[2] = a[2] = 1;
for(i = 2; a[i]/a[i-1] >= 1; i++){
a[i+1] = a[i] + a[i-1];
}
printf("INT: %d\n", i);
for(i = 2; b[i]/b[i-1] >= 1; i++){
b[i+1] = b[i] + b[i-1];
}
printf("ULONG LONG: %d", i);
return 0;
}
输出结果:
INT: 47
ULONG LONG: 94