题目描述:
N的阶乘(记作 N!)是指从 1到 N(包括 1和 N)的所有整数的乘积。 阶乘运算的结果往往都非常的大。 现在,给定数字 N,请你求出 N!的最右边的非零数字是多少。 例如 5!=1×2×3×4×5=120,所以 5!的最右边的非零数字是 2。
输入格式:
共一行,包含一个整数 N。
输出格式:
输出一个整数,表示 N! 的最右边的非零数字。
数据范围:
1≤N≤1000
输入样例:
7
输出样例:
4
思路:先将n!的末尾的零都去掉,然后再求末位数字。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
int n = read.nextInt();
int res = 1;//保存最终结果
int d2 = 0;//记录有多少个2
int d5 = 0;//记录有多少个5
for(int i = 1;i <= n;i++) {
int x = i;
while(x % 2 == 0) {
x/=2;
d2++;
}
while(x % 5 == 0) {
x/=5;
d5++;
}
res = res * x % 10;//把去掉2和5的其他数乘起来,并 mod 10
}
int k = Math.min(d2,d5);
for(int i = 0;i < d2-k;i++) res = res * 2 % 10;//把去掉k个2之后剩余的2乘起来并mod10
for(int i = 0;i < d5-k;i++) res = res * 5 % 10;//把去掉k个5之后剩余的5乘起来并mod10
System.out.println(res);
}
}