题目描述
求阶乘 $n!$ 的最右边的非零位
思路
在从 $1$ 到 $n$ 累计阶乘的过程中
每乘完一次后,可以先舍弃答案中末尾的所有 $0$
由数据范围 $1 \le n \le 1000$ 可得,
除去末尾$0$后,答案只需保留在 $1000$ 以内的有效十进制数即可,答案$\mod 1000$
即运算过程中,当两相乘的数不计所有的末尾 $0$ 最多也只会出现三位数之间的乘法
最后模 $10$ 取个位输出即可
代码
#include<cstdio>
using namespace std;
int main() {
int n;
scanf("%d", &n);
int res = 1;
for (int i = 2; i <= n; ++i) {
res = res * i;
while (res % 10 == 0) res /= 10;
res %= 1000;
}
printf("%d", res % 10);
return 0;
}