注册 登录
编程论坛 C++教室

求指教 怎么改!!!

飘渺逸云 发布于 2013-10-20 01:32, 242 次点击
已知Fibonacci数列:1,1,2,3,5,8,……,它可由下面公式表述:

F(1)=1                   if n=1

F(2)=1                   if n=2

F(n)=F(n-1)+F(n-2)       if n>2

试求F(50)值。  




#include <iostream.h>
int main()
{
    int a,b,c,d,i;
    cin>>i;
    a=1;
    b=1;
    for (d=3;d<=i;d++)
    {
        c=a+b;
        a=b;
        b=c;
    }
    cout<<c<<endl;
    return 0;
}


求助 我要怎么改才能输出11位数
3 回复
#2
yuccn2013-10-20 09:36
用 int64 (或者longlong)看看。

你的算法,i 大于2 的时候我不知道对不对,不过 i等于1 的时候,应该就不对了,记得初始化一下c啊
#3
pauljames2013-10-20 17:46
递归(有风险),或者用数组(数据类型够大)
#4
rjsp2013-10-21 09:27
程序代码:
#include <iostream>
#include <cassert>
using namespace std;

unsigned long long f( unsigned n )
{
    assert( n <= 93 );

    unsigned long long a=1, b=0;
    for( unsigned i=0; i!=n; ++i )
    {
        unsigned long long c = a + b;
        //if( c < b )
        
//{
        
//    cerr << "[Error] maxvalue of n should be less than or equal to " << i << '\n';
        
//    return 0;
        
//}
        a = b;
        b = c;
    }
    return b;
}

int main()
{
    //assert( f(0) == 0 );
   
//assert( f(1) == 1 );
   
//assert( f(2) == 1 );
   
//assert( f(3) == 2 );
   
//assert( f(4) == 3 );
   
//assert( f(5) == 5 );
   
//assert( f(6) == 8 );

    unsigned n;
    cin >> n;

    cout << f(n) << endl;

    return 0;
}
1