大斐波那契数列求解
题目描述
定义:
f(1)=1, f(2)=1, f(n>2)=f(n-1)+f(n-2)
我们把符合以上定义的序列称为斐波那契序列,现在给你一个数字n,请你求出f(n)。
输入
输入包含多组测试数据。每组数据为一个正整数n。
输出
输出对应的f(n)。题目保证结果不会超过1000位数字。
样例输入
100
样例输出
354224848179261915075
源码
#include<bits/stdc++.h>
using namespace std;
void add(int *a,int *b,int *c); //a+b=c
void copy(int *a,int*b); //将b复制到a数组
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int a[1000],b[1000],c[1000];//a加数,b被加数
//初始化数组
for(int i=0;i<1000;i++){
c[i]=0; a[i]=0; b[i]=0;
}
a[0]=b[0]=1;
if(n==1||n==2){
cout<<1<<endl;continue;
}
else if(n>=2){
//循环直到求出第n位数字
for(int i=2;i<n;i++){
add(a,b,c);
copy(a,b);
copy(b,c);
}
}
int pos=0;
for(int i=999;i>=0;i--){
if(c[i]!=0){
pos=i;break;
}
}
for(pos;pos>=0;pos--)
cout<<c[pos];
cout<<endl;
}
return 0;
}
void add(int *a,int *b,int *c){
int i=0; int x=0;
for(i;i<1000;i++){
c[i]=a[i]+b[i]+x;
x=c[i]/10;
c[i]%=10;
}
}
//将b复制到a数组
void copy(int *a,int*b){
for(int i=0;i<1000;i++){
a[i]=b[i];
}
}