问题描述
计算: 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的最后数
}
}