1 超时:
2 import java.lang.*;
3 import java.util.*;
4 import java.text.*;
5 import java.math.*;
6 import java.io.*;
7 class Main
8 {
9 public static void main(String []args)
10 {
11 Scanner cin=new Scanner(System.in);
12 BigInteger f[]=new BigInteger[1000];
13 BigInteger g=BigInteger.valueOf(10),e;
14 BigInteger l=BigInteger.valueOf(10000);
15 int i,n,m;
16 while(cin.hasNext())
17 {
18 n=cin.nextInt();
19 f[0]=BigInteger.valueOf(0);
20 f[1]=BigInteger.valueOf(1);
21 f[2]=BigInteger.valueOf(1);
22 if(n>1)
23 {
24 for(i=2;i<=n;i++)
25 {
26 f[2]=f[1].add(f[0]);
27 f[0]=f[1];
28 f[1]=f[2];
29 }
30 e=f[2];
31 while(e.compareTo(l)<0)
32 {
33 e=e.divide(g);
34 }
35 System.out.println(f[2]);
36 }
37 else if(n==1)System.out.println(1);
38 else System.out.println(0);
39 }
40 }
41 }
1 import java.math.*;
2 import java.lang.*;
3 import java.text.*;
4 import java.util.*;
5 import java.io.*;
6 class Main
7 {
8 public static void main(String[] args)
9 {
10 Scanner cin=new Scanner(System.in);
11 int arr[]={0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765},n;
12 while(cin.hasNext())
13 {
14 n=cin.nextInt();
15 if(n<=20)
16 {
17 System.out.println(arr[n]);
18 continue;
19 }
20 else
21 {
22 double m=Math.log10(1.0/Math.sqrt(5))+n*Math.log10((1+Math.sqrt(5))/2);
23 double p=m-(int)m;
24 p=Math.pow(10,p);
25 while(p<1000)
26 {
27 p*=10;
28 }
29 System.out.println((int)p);
30 }
31 }
32 }
33 }