http://acm.hdu.edu.cn/showproblem.php?pid=1715
记得打表!!!
#include<string>
#include<cstdio>
#include<iostream>
#include<sstream>
using namespace std;
string as[1005];
void bu0(string& a,string& b,bool flag){
//对a b补零
//flag为true 前补零 , 否则后补零
int len=a.length()>b.length()?a.length():b.length();
if(flag){
while(a.length()!=len){
a="0"+a;
}
while(b.length()!=len){
b="0"+b;
}
}else{
while(a.length()!=len){
a+="0";
}
while(b.length()!=len){
b+="0";
}
}
}
void madd(string a,string b,string&ans){
//将字符串a与b相加
//返回值存于ans(答案) c进位,
int c;
bu0(a,b,true);
c=0;ans="";
int len=a.length();
for(int i=len-1;i>=0;i--){
int aa=a[i]-'0';
int bb=b[i]-'0';
int x=(aa+bb+c)%10;
ans=(char)(x+'0')+ans;
c=(aa+bb+c)/10;
}
//对进位处理与否,在下
if(c!=0)ans=(char)(c+'0')+ans;
}
int main(){
as[1]=as[2]="1";
string a="1";
string b="1";string c;
for(int i=3;i<=1000;i++){
madd(a,b,c);
a=b;b=c;
as[i]=c;
}
int n;cin>>n;
while(n--){
int k;cin>>k;
cout<<as[k]<<endl;
}
}