原题为:
一开始用最笨拙的思路:先用递归算斐波那契数列的值,再取余。结果运算速度太慢,当数值大于10007时还出错。
import java.util.*; public class Main { public static void main(String[] args) { int a,b,c; Scanner in = new Scanner(System.in); a = in.nextInt(); b=f(a); c = b%10007; System.out.println(c); } public static int f(int n) { if(n==1|n==2) return 1; else return f(n-1)+f(n-2); } }
检测结果:后来改用循环算法求斐波那契,而且直接取余,就通过了:
结果为:import java.util.*; public class Main { public static void main(String[] args) { int a,b; Scanner in = new Scanner(System.in); a = in.nextInt(); b=f(a); System.out.println(b%10007); } public static int f(int n) { int f0 = 1; int f1 = 1; int f2 = 0; if(n==1|n==2) return 1; else { for(int i=2;i<n;i++) { if(f1>10007) f1=f1%10007; if(f0>10007) f0=f0%10007; f2=f1+f0; f0=f1; f1=f2; } return f2; } } }