藍橋試題 算法提高 計算超階乘 JAVA

問題描述

 計算: 1*(1+k)*(1+2*k)*(1+3*k)*...*(1+n*k-k)

的末尾有多少個0,最後一位非0位是多少。
輸入格式
  輸入的第一行包含兩個整數n, k。
輸出格式
  輸出兩行,每行一個整數,分別表示末尾0的個數和最後一個非0位。
樣例輸入
15 2
樣例輸出
0
5

思路:規律的話的題目已經給的很清楚了,就是要考慮數大取餘的情況下,因爲太小則不能通過測試9。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int k = scanner.nextInt();
		int zero = 0;
		long ans = 1;
		for (int i = 1; i < n; i++) {
			ans *= (1 + i * k);                   // 階乘公式
			while (ans % 10 == 0 && ans > 9) {    // 判斷是否是兩位數
				ans /= 10;                        // 每次計算出來的數,將最後的0都抹掉
				zero++;
			}
			ans = ans % 100000;                   // 取餘的時候應該取大點,防止進位時出現差錯 
		}
		System.out.println(zero);                 // 輸出0的個數
		System.out.println(ans % 10);             // 輸出非0的最後數
	}
}

小劇場:如果在路盡頭,我能給你一個擁抱…

英文版:If at the end of the road, I can give you a hug…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章