1. 程式人生 > >演算法題練習系列之(三十八): 斐波那契鳳尾

演算法題練習系列之(三十八): 斐波那契鳳尾

-----------------------------------------------------------------------------------------------------------

時間限制:1秒  空間限制:32768K  程式碼長度限制 100 KB

-----------------------------------------------------------------------------------------------------------
題目描述:
NowCoder號稱自己已經記住了1-100000之間所有的斐波那契數。
為了考驗他,我們隨便出一個數n,讓他說出第n個斐波那契數。當然,斐波那契數會很大。因此,如果第n個斐波那契數不到6位,則說出該數;否則只說出最後6位。

輸入描述:
輸入有多組資料。
每組資料一行,包含一個整數n (1≤n≤100000)。
輸出描述:
對應每一組輸入,輸出第n個斐波那契數的最後6位。
輸入例子:
1
2
3
4
100000
輸出例子:
1
2
3
5
537501

-----------------------------------------------------------------------------------------------------------

實現思路:
(1).典型的斐波那契數列,用陣列提前算出每項的值;

(2).每項的值會逐漸增大超出範圍,所以每步用1000000取餘,獲取最後6位即可;

(3).需要注意的是,輸出的格式化,如果後六位以0開始,需要補齊。


----------------------------------------------------------------------------------------------------------

package com.biyao.algorithm.niuke.a2;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main_a2_005 {
	
	public static int[] resArr = new int[100001];
	static{
		resArr[0] = 1;
		resArr[1] = 1;
		for (int i = 2; i < 100001; i++) {
			resArr[i] = (resArr[i-1] + resArr[i-2]) % 1000000;
		}
	}
	public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        DecimalFormat df=new DecimalFormat("000000");
        while(scan.hasNextInt()){
        	int n = scan.nextInt();
        	int num = resArr[n];
        	if(n < 25){
        		System.out.println(num);
        	}else{
        		System.out.println(df.format(num));
        	}
        }
	}
}