FZU 1060 Fibonacci数列
2009-07-21 19:01
399 查看
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; }
相关文章推荐
- Fzu_1060 Fibonacci数列
- Problem 1060 Fibonacci数列
- 1060(Fibonacci数列)
- Problem 1060 Fibonacci数列
- RunningMan FZU - 2221
- FZU 2150 Fire Game(多起点bfs)
- PAT1060. 爱丁顿数
- PAT乙级 1060. 爱丁顿数(25)--数学问题,sort()排序要注意的问题
- 第十四个目标 FZU - 2236 离散化 树状数组
- FZU 2150 Fire Game
- FZU 2282 错排
- FZU 2282 错排
- FZU 2278 期望
- FZU 2278 期望
- [PAT乙级]1060. 爱丁顿数(25)
- FZU 1759-Super A^B mod C (快速幂+欧拉降幂+欧拉函数)
- FZU 2150 Fire Game
- FZU - 2148 Moon Game (枚举+计算几何)
- I - Moon Game FZU - 2148 ---几何+枚举
- F - 检查站点 FZU - 2195(树的最长遍历,简单)