您的位置:首页 > 其它

FZU 1060 Fibonacci数列

2009-07-21 19:01 399 查看
Fibonacci数列

Time Limit:1sMemory limit:32M
Accepted Submit:714Total 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: