题解 | 阶乘末尾非零数字
阶乘末尾非零数字
https://www.nowcoder.com/practice/248c8fbee56e491aa147b67b9c082da0
import java.util.*;
public class Main {
static class Solution {
public int lastNonZeroDigit(int n) {
// n2表示因子2的个数,n5表示因子5的个数
int n2 = 0, n5 = 0;
// p记录其他因子相乘的最后一位
int p = 1;
// 遍历2到n的每个数
for (int i = 2; i <= n; i++) {
int temp = i;
// 统计因子5的个数
while (temp % 5 == 0) {
n5++;
temp /= 5;
}
// 统计因子2的个数
while (temp % 2 == 0) {
n2++;
temp /= 2;
}
// 剩余因子相乘的最后一位
p = (p * temp) % 10;
}
// 处理剩余的因子2
for (int i = 0; i < n2 - n5; i++) {
p = (p * 2) % 10;
}
return p;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Solution solution = new Solution();
System.out.println(solution.lastNonZeroDigit(n));
}
}

查看23道真题和解析
