哈,用java还有C++各交了一次
C++版
#include<iostream> #include<algorithm> using namespace std; int sum[201][50],len1[201]; void init() { sum[0][0]=0;len1[0]=0; sum[1][0]=1;len1[1]=0; sum[2][0]=2;len1[2]=0; for(int i=3;i<=200;i++) { int k=0,j; //cout<<i<<endl; for(j=0;j<=len1[i-2];j++) { int t=k+sum[i-1][j]+sum[i-2][j]; // cout<<t<<endl; k=t/10000; sum[i][j]=t%10000; } //cout<<k<<' '<<j<<endl; while((j-1)!=len1[i-1]) { int t=k+sum[i-1][j]; k=t/10000; sum[i][j]=t%10000; j++; } while(k) { int t=k; k=t/10000; sum[i][j]=t%10000; j++; } len1[i]=j-1; //cout<<j<<endl; } } int main() { int n,len; init(); char str[201]; scanf("%d",&n); while(n--) { scanf("%s",str); len=strlen(str); printf("%d",sum[len][len1[len]]); for(int i=len1[len]-1;i>=0;i--) printf("%04d",sum[len][i]); printf("\n"); } return 0; }
java版
import java.math.BigInteger; import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int t; String a1,b1; BigInteger [] sum = new BigInteger[201]; sum[0] = BigInteger.valueOf(1); sum[1] = BigInteger.valueOf(2); for(int i=3;i<=200;i++) sum[i-1]=sum[i-3].add(sum[i-2]); Scanner in = new Scanner(System.in); t = in.nextInt(); for(int i = 1 ; i <= t ; i++){ a1 = in.next(); System.out.println(sum[a1.length()-1]); } } }