题目描述
也许你早就知道阶乘的含义,𝑁N 阶乘是由 11 到 𝑁N 相乘而产生,如:
12!=1×2×3×4×5×6×7×8×9×10×11×12=479,001,60012!=1×2×3×4×5×6×7×8×9×10×11×12=479,001,600
1212 的阶乘最右边的非零位为 66。
写一个程序,计算 𝑁 (1≤𝑁≤5×107)N (1≤N≤5×107) 阶乘的最右边的非零位的值。
注意:10,000,000!10,000,000! 的末尾有 24999992499999 个零。
输入格式
仅一行包含一个正整数 𝑁N。
输出格式
一个整数,表示最右边的非零位的值。
输入输出样例
输入 #1
12
输出 #1
#include <iostream>
using namespace std;
int main() {
int n;
scanf ("%d", &n);
int ans = 1, sum2 = 0, sum5 = 0;
for (int i = 2; i <= n; i ++) {
int t = i;
while (t % 2 == 0) {
sum2 ++;
t /= 2;
}
while (t % 5 == 0) {
sum5 ++;
t /= 5;
}
ans = ans * t % 10;
}
sum2 -= sum5;
while (sum2 --)
ans = ans * 2 % 10;
cout << ans % 10;
return 0;
}
6
说明/提示
USACO Training Section 3.2