P0505

463 阅读1分钟

解析: 看到阶乘的第一反应就是高精度大数据处理,高级语言一般都有提供相对应的方法,但是用自己的代码去撸的话首先想到的就是用数组去分解这种大型数据。看这题目的意思又挺简单的,好像用不上大数据的存储。

题目里提供了两个关键的信息

  • 输出最终结果右边第一个非0的数字
  • n<=100

对于第一个关键信息,我们可以在阶乘的过程中就将这个0给去掉,这样直接输出结果的最后一个数字就行了,而且还可以减小数字大小不会那么容易溢出。

第二个关键信息可以决定我们取数的范围,这里n的最大值是100,所以我们可以取每次结果的后四位进行下一次的运算,也就是对1000取模。

对于为什么对1000取模

1.对10取模的话

12*5=60;

取模运算的话就变成了2*5=10;就错了;

2.对100取模的话

125*4=500;

也会出错;

但是对于1000不会出错;

package _3_5_test;

import java.util.Scanner;

/*P0505
 * 
 */
public class Seventy_Two {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		
		int result =1;
		
		for(int i=1;i<=n;i++) {
			result = result*i;
//			如果数字的末尾是0,去掉0
			while(result%10==0) {
				result = result/10;
			}
//			取结果的后三位进行下一步运算
			result = result%1000;
		}
//		输出结果的最后一位数
		System.out.println(result%10);
		
		
		
	}

}