大菲波数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8986 Accepted Submission(s): 3060
Problem Description
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项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
Source
Recommend
//-----------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------
第一题手敲大数,自己的写法,应该很不规范
毕竟是自己写的,贴代码纪念一下
#include<iostream>
#include<stdio.h>
using namespace std;
struct ds{
int num[1001];
int len;
void inif(int a , int l){
memset(num,0,sizeof(num));
len = l;
num[0] = a;
}
void plus(const ds& a , const ds& b){
int j = 0 ;
int tmp = 0;
while( j < a.len && j < b.len ){
num[j] = ( a.num[j] + b.num[j] + tmp ) % 10;
tmp = ( a.num[j] + b.num[j] + tmp ) / 10 ;
++j;
}
if( j < a.len ){
while( j < a.len ){
num[j] = ( a.num[j] + tmp ) % 10 ;
tmp = ( a.num[j] + tmp ) / 10 ;
j++;
}
}else{
while( j < b.len ){
num[j] = ( b.num[j] + tmp ) % 10 ;
tmp = ( b.num[j] + tmp ) / 10 ;
++j;
}
}
if( tmp ) num[j++] = tmp ;
len = j ;
return ;
}
void print(){
for( int i = len - 1 ; i >= 0 ; --i )
printf( "%d" , num[i] );
printf( "\n" );
return ;
}
}f[1001];
int main(){
f[1].inif(1,1);
f[2].inif(1,1);
for( int i = 3 ; i < 1001 ; ++i )
f[i].plus(f[i-1],f[i-2]);
int t , n ;
scanf( "%d" , &t );
while( t-- ){
scanf( "%d" , &n );
f[n].print();
}
return 0;
}