还是斐波拉契数列问题,求解怎样才能不溢出
我的代码如下,需要将SIZE改为40,但是我的程序会溢出,求大神指教
#include<stdio.h>
#define SIZE 18
int main() {
long long a[SIZE], x, y, j;/*initialize*/
a[1] = 1;
printf("%I64d", a[1]);
x = 0, y = 1;
for (j = 2; j <= SIZE; j++) {
a[j] = x + y;
x = y;
y = a[j];
printf(" %I64d", a[j]);
}
return 0;
}
[解决办法]
#include<stdio.h>
#define SIZE 18
int main(void)
{
long long a[SIZE], x, y, j;/*initialize*/
a[0] = 1;
printf("%I64d", a[0]);
x = 0, y = 1;
for (j = 1; j < SIZE; j++)
{
a[j] = x + y;
x = y;
y = a[j];
printf(" %I64d", a[j]);
}
return 0;
}
最后一个a下标取值溢出了,a[SIZE]下标范围是a[0]~a[SIZE-1]。改成上面的形式。
[解决办法]
LZ所谓的溢出,实际上就是下标没有从0开始,导致的错误。
按照1L改好就行了。
f(40) = 102334155
long long绰绰有余。
将下班从0开始计算后,直接# define SIZE 40即可。