FZU 1060 Fibonacci数列

 

Fibonacci数列
Time Limit:1s Memory limit:32M
Accepted Submit:714 Total Submit:2875

1202年,意大利数学家斐波那契出版了他的《算盘全书》,在书中第一次提到了著名的Fibonacci数列,定义如下:

 

 

现在你的任务是求出Fibonacci数列的第n项。

输入输出格式

输入数据由多组数据组成。每组数据一行,仅一个整数,表示n的值。

对于每组数据,输出仅一行,即Fibonacci数列的第n项。

我们保证输出的结果不会超过1000位数。

样例输入

20

样例输出

6765

Original: FZUPC 2005

解题:

       碍于时间的限制,用递归求斐波那契将超出时间。所以直接循环求解。对于大数的相加,可以用数组来存储,功能实现封装在函数里面,要注意字符与数字之间的转换,还有进位标志,相加后的数组长度等等。最后倒序输出数组即可。

#include <iostream> #include <string> using namespace std; void add(char a[],char b[],int m,int n) { int flag=0;int temp,i; for(i=0;i<m || i<n ;i++) { if(a[i]=='/0') a[i]='0'; if(b[i]=='/0') b[i]='0'; temp=a[i]-48+b[i]-48+flag; flag=0; if(temp>9) flag=1; b[i]=temp%10+48; } if(flag==1) b[i]='1'; } int main() { int number,i; char a[1001],b[1001]; while(cin>>number) { memset(a,'/0',sizeof(a)); memset(b,'/0',sizeof(b)); a[0]='1';b[0]='1'; for(i=3;i<=number;i++) { if(i%2!=0) add(a,b,strlen(a),strlen(b)); else add(b,a,strlen(a),strlen(b)); } if((i-1)%2!=0) for(int j=strlen(b)-1;j<strlen(b);j--) cout<<b[j]; else for(int k=strlen(a)-1;k<strlen(a);k--) cout<<a[k]; cout<<endl; } return 0; }

      

你可能感兴趣的:(存储,任务,出版,IM)