当前位置: 代码迷 >> 综合 >> Problem 1060 Fibonacci数列
  详细解决方案

Problem 1060 Fibonacci数列

热度:86   发布时间:2024-01-08 23:53:31.0

Problem Description

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

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

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

Output
对于每组数据,输出仅一行,即Fibonacci数列的第n项。
我们保证输出的结果不会超过1000位数。

Sample Input
20

Sample Output
6765

大数问题,要用字符串来存储运算

#include"stdio.h"
#include"string"
#include"iostream"
using namespace std;string add(string a,string b)
{string c;int cha = b.length()-a.length();int gg=0;for(int i=b.length()-1;i>=cha;i--){int numa=a[i-cha]-48;int numb=b[i]-48;c.push_back((numa+numb+gg)%10+48);if(numa+numb+gg>=10)gg=1;elsegg=0;}for(int i=cha-1;i>=0;i--){c.push_back((b[i]-48+gg)%10+48);if(b[i]-48+gg>=10)gg=1;elsegg=0;}if(gg)c.push_back('1');for(int i=0;i<c.length()/2;i++){int temp=c[i];c[i]=c[c.length()-1-i];c[c.length()-1-i]=temp;}return c;
}
string mm[5001];
int main()
{int n;mm[0]="1";mm[1]="1";for(int i=2;i<5000;i++){mm[i]=add(mm[i-2],mm[i-1]);}while(scanf("%d",&n)==1){cout<<mm[n-1]<<endl;}return 0;
}
  相关解决方案