蓝桥试题 算法提高 计算超阶乘 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…

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