问题标题: 酷町堂:2744 斐波那契数列2

0
0
已解决
芮奥运
芮奥运
高级光能
高级光能

 

2744斐波那契数列2 // http://judge.codingtang.com/problem/2744/

2744   斐波那契数列2

题目描述 Description

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。 给出一个正整数n,要求菲波那契数列中第n个数是多少。n不超过1000

输入描述 Input Description

一行:一个正整数n,n不超过1000

输出描述 Output Description

个正整数,表示菲波那契数列中第n个数是多少

样例输入 Sample Input

 

5

样例输出 Sample Output

 

5


0
已采纳
叶子煊
叶子煊
中级光能
中级光能

这是主要代码:

 

        a[0]=s1.size(); 
        b[0]=s2.size(); 
        循环(int i=1;i<=a[0];i++) 
        { 
            a[i]=s1[a[0]-i]-'0'; 
        } 
        循环(int i=1;i<=b[0];i++) 
        { 
            b[i]=s2[b[0]-i]-'0'; 
        } 
        sum=max(a[0],b[0]);
        循环(int i=1;i<=sum;i++) 
        { 
            a[i]+=b[i]; 
            a[i+1]+=a[i]/10; 
            a[i]%=10; 
        } 
        sum++; 
        循环((a[sum]==0)&&(sum>1))                                                                                                  
        {
            sum--; 
        }
        s=0;
        循环(int i=sum;i>=1;i--) 
        { 
            x[s]=a[i]+'0'; 
            s++;
        } 
        s1=s2; 
        s2=x; 
    } 

最后输出:

    cout<<s2<<endl; 

自己多理解,哈

望采纳!!!

~~~~~~~~~~~~~~~~~~~~~~~

0
李语彤
李语彤
中级守护
中级守护

这道题要用到高精度加法,和交换函数,加在原斐波纳切数列,就行。

int a[1010],b[1010],c[1010]; 
void jiafa()//高精度加法
{
    int h,jw=0;
    c[0]=max(a[0],b[0]);
    for(int i=1;i<=c[0];i++) 
    { 
        h=a[i]+b[i]+jw;
        c[i]=h%10;
        jw=h/10;
    } 
    if (jw!=0)
    {
        c[0]++;
        c[c[0]]=jw;
    }
} 
void change(int a[],int b[])//change函数用来交换
{
    for (int i=0;i<=b[0];++i)
        a[i]=b[i];
}
int main() 
{ 
    int n;
    cin>>n; 
    if (n<=2)
    {
        cout<<1;
        return 0;
    }
    a[0]=a[1]=1;//第一个和第二个初始为1
    b[0]=b[1]=1;//第一个和第二个初始为1
    for (int i=3;i<=n;++i) 
    { 
        jiafa();
        change(a,b);//交换使它能继续相乘
        change(b,c);
    } 
    for (int i=c[0];i>=1;i--)
    cout<<c[i]; 
0
时梓繁
时梓繁
修练者
修练者

#include<iostream> 
#include<cstring> 
#include<cmath>
#include<string>
#include<cstdio>
using namespace std; 
char x[1200]; 
整型 s,n,sum,a[1200],b[1200]; 
字符串 s1,s2; 
int main() 

    输入>>n; 
    s1="1"; 
    s2="1"; 
    循坏(int j=2;j<n;j++) 
    { 
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        a[0]=s1.size(); 
        b[0]=s2.size(); 
        循坏(int i=1;i<=a[0];i++) 
        { 
            a[i]=s1[a[0]-i]-'0'; 
        } 
        循坏(int i=1;i<=b[0];i++) 
        { 
            b[i]=s2[b[0]-i]-'0'; 
        } 
        sum=max(a[0],b[0]);
        循坏(int i=1;i<=sum;i++) 
        { 
            a[i]+=b[i]; 
            a[i+1]+=a[i]/10; 
            a[i]%=10; 
        } 
        sum++; 
        while((a[sum]==0)&&(sum>1))                                                                                                  
        {
            sum--; 
        }
        s=0;
        循坏(int i=sum;i>=1;i--) 
        { 
            x[s]=a[i]+'0'; 
            s++;
        } 
        s1=s2; 
        s2=x; 
    } 
    输出<<s2<<endl; 
    return 0;
}

 

 

采纳

0
0
赵逸凡
赵逸凡
初级启示者
初级启示者
 定义 n,sum=0;
    输入>>n;
    如果(n==1||n==2)
    {
        输出<<1;返回 0;
    }
    c[0]=c[1]=d[0]=d[1]=1;//初始化为一 
    for(int j=0;j<=n;j++)
    {
        如果(n==1||n==2)
        {
            cout<<1;退出循环;  
        }
        Plus(c,d);//相加 
        f(c,d);//交换c数组与d数组 
        f(d,w);//交换d数组与w数组 
        sum自加;//统计次数,变化一次统计一次 
        if(n等于sum)
        {
            for(int i=w[0];i>=1;i--)
            {
                cout<<w[i];
            }
        }
    } 
    return 0;

plus函数自己写

and f函数

我要回答