Problem Description
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项Fibonacci数值。
Input
输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。
Output
输出为N行,每行为对应的f(Pi)。
Sample Input
5 1 2 3 4 5
Sample Output
1 1 2 3 5
1 1 2 3 5
解析:高精度的使用
#include<iostream> using namespace std; int f[1005][300]; void solve(){ f[1][0] = f[2][0] = 1;//f[i][0] 记录第 i个的长度. f[1][1] = f[2][1] = 1 ;// 初始化前俩 int len = 1;//辅助变量 for(int i = 3;i <= 1000; i++){ for(int j = 1; j<=len;j++){ // 按照加法运算进行模拟 f[i][j] += f[i-1][j]+f[i-2][j]; if(f[i][j]>=10){ // 注:两个个长度为len的数相加, 最多有len+1位. f[i][j+1] += f[i][j] / 10; f[i][j] %=10; } } while(f[i][len+1]){//计算 f[i] 的长度 len++; } f[i][0] = len; } } int main() { int n,t; solve(); cin>>n; while(n--){ scanf("%d",&t); for(int i = f[t][0];i>=1;i--){ printf("%d",f[t][i]); } printf("\n"); } return 0; }