演算法題練習系列之(三十八): 斐波那契鳳尾
阿新 • • 發佈:2019-02-05
-----------------------------------------------------------------------------------------------------------
時間限制: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)); } } } }