首页 > 其他 > 详细

蓝桥杯入门训练-Fibonacci数列

时间:2018-01-25 23:52:09      阅读:401      评论:0      收藏:0      [点我收藏+]

刚刚开始刷题的时候就栽了个大跟头,稍微记一下。。。。。。

 

技术分享图片

技术分享图片

 

 


一开始不是很理解:“我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单”这句话。

写完代码测试后才发现 当Fn 很大的时候,会超出int的表示范围

后来才想明白为什么要这么做

 

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args)
 5     {
 6         int n = new Scanner(System.in).nextInt();
 7         int[] Fibonacci = new int[n];
 8         for(int i= 0; i<Fibonacci.length;i++)
 9         {
10             if(i==0 || i==1)
11                 Fibonacci[i]=1;
12             if(i>1)
13             Fibonacci[i] = (Fibonacci[i-2] + Fibonacci[i-1]) % 10007;
14         }
15         
16         System.out.println(Fibonacci[n-1]);
17     }
18 }

假设

Fibonacci[i-2] = x
Fibonacci[i-1] = y

Fibonacci[ i ] =( x + y ) % 10007

如果不求余数,它的值可以如下表示:

Fibonacci[i-2] = ( num1 * 10007 ) + x;
Fibonacci[i-1] = ( num2 * 10007 ) + y;
Fibonacci[ i ] = Fibonacci[i-2] + Fibonacci[i-1] = ( (num1+num2)*10007 + x + y )

蓝桥杯入门训练-Fibonacci数列

原文:https://www.cnblogs.com/Lucky-2-child/p/8353544.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!