读书人

关于C++斐波那契数列的有关问题

发布时间: 2013-09-12 22:07:04 作者: rapoo

关于C++斐波那契数列的问题

#include<iostream>
using namespace std;
int Fibo(int N)
{
int i;
int str[50];
str[0] = 1;
str[1] = 1;
for(i = 2; i < N; i++)
{
str[i] = str[i - 1] + str [i - 2];
}
return str[N - 1];
}

int main()
{
int N;
cin>>N;
cout<<Fibo(N)<<endl;
return 0;
}


这是楼主的代码。。输出第N个斐波那契数列的数值,可是第50个就是负数了。。是怎么回事呢??
[解决办法]
引用:
Quote: 引用:

数值太大溢出了。改成unsigned long long吧


是这样吗?
#include<iostream>
using namespace std;
int Fibo(int N)
{
int i;
unsigned long long str[50];
str[0] = 1;
str[1] = 1;
for(i = 2; i < N; i++)
{
str[i] = str[i - 1] + str [i - 2];
}
return str[N - 1];
}

int main()
{
int N;
cin>>N;
cout<<Fibo(N)<<endl;
return 0;
}


可是还是负的。。


函数的返回值还是int
函数中的str应该用动态申请,你这样就定死了不能超过50

#include<iostream>
using namespace std;
unsigned long long Fibo(int N)
{
int i;
unsigned long long* str = new unsigned long long[N];
str[0] = 1;
str[1] = 1;
for(i = 2; i < N; i++)
{
str[i] = str[i - 1] + str [i - 2];
}
unsigned long long ret = str[N - 1];
delete[] str;
return ret;
}

int main()
{
int N;
cin>>N;
cout<<Fibo(N)<<endl;
return 0;
}

读书人网 >C++

热点推荐