高级光能
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
中级光能
这是主要代码:
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;
自己多理解,哈
望采纳!!!
~~~~~~~~~~~~~~~~~~~~~~~
中级守护
这道题要用到高精度加法,和交换函数,加在原斐波纳切数列,就行。
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];
修练者
#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;
}
采纳
初级启示者
定义 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函数