题目描述:
N 的阶乘(记作 N!)是指从 1 到 N(包括 1 和 N)的所有整数的乘积。
阶乘运算的结果往往都非常的大。
现在,给定数字 N,请你求出 N! 的最右边的非零数字是多少。
例如 5!=1×2×3×4×5=120,所以 5! 的最右边的非零数字是 2。
输入格式
共一行,包含一个整数 N。
输出格式
输出一个整数,表示 N! 的最右边的非零数字。
数据范围
1≤N≤1000
输入样例:
7
输出样例:
4
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int sum;
/*
刚开始犯了一个错误,就是把最右边结果不为0的数
算成当前数的与前一个阶乘的个位数相乘的结果,然后再取个位数,
看了题解发现其实最右边一个不为零的数不一定是个位相乘的结果,
如 15 * 16 = 240 但是 5 * 6 = 30
*/
int main()
{
scanf("%d", &n);
sum = 1;
for(int i = 1; i <= n; i++)
{
sum *= i;
while(sum % 10 == 0)
{
sum /= 10;
}
sum = sum % 1000; // 不能写成%10
}
printf("%d\n", sum % 10);
return 0;
}