解题思路: 1.一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。
2.阶乘的增长速度非常快,eg:15!= 1307674368000,这个值已经非常大了,此题如果我们还是先把一个数字的阶乘先求出来,再去获取最后一个非0值,显然是非常困难的。
3.此题的目的是去计算n!最右边的那个非0的数字是多少,所以其实我们只需要知道阶乘的最后几位就可以得到了(注: 因为我们无法确定最后有几个0,所以我们得取4~5位).
具体代码如下:
import java.util.Scanner;
/**
* 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。
* 任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。
* 例如,5!=1*2*3*4*5=120,因此5!最右边的那个非0的数字是2。
* 再如,7!=5040,因此7!最右边的那个非0的数字是4。
* 再如,15!= 1307674368000,因此15!最右边的那个非0的数字是8。
* 请编写一个程序,输入一个整数n(0<n<=100),然后输出n!最右边的那个非0的数字是多少。
* @author hf
*
*/
public class Blogs2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个整数n(0<n<=100)");//在代码中没有这句话,我只是写个提示
int n = scanner.nextInt();
int sum = 1;
for (int i = 1; i <= n; i++) {
sum *= i;// 求阶乘
// 消末尾0值
while (sum % 10 == 0) {
sum /= 10;
}
// 此题只需要最右边一位非0值,
// 所以只要阶乘的最后几位继续循环进行阶乘计算即可
sum %= 10000;
}
System.out.println(n + "!最右边的那个非0的数字是: " + (sum % 10));
scanner.close();
}
}