原题为:
一开始用最笨拙的思路:先用递归算斐波那契数列的值,再取余。结果运算速度太慢,当数值大于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;
}
}
}
结果为: