题意是给你一个数n, 然后让你求出n!的最后一位非0的数, 消去n!后面所有的0就可以了, 实现的方法是去掉阶乘因子中所有的5和同数量的2就行,代码如下:
/* ID: m1500293 LANG: C++ PROG: fact4 */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int f[5000]; int main() { freopen("fact4.in", "r", stdin); freopen("fact4.out", "w", stdout); int n; scanf("%d", &n); for(int i=1; i<=n; i++) f[i] = i; int num_5 = 0; for(int i=1; i<=n; i++) { while(f[i]%5 == 0) { f[i] /= 5; num_5++; } } int num_2 = 0; for(int i=1; i<=n; i++) { while(f[i]%2==0) { f[i] /= 2; num_2++; if(num_2==num_5) break; } if(num_2 == num_5) break; } int res = 1; for(int i=1; i<=n; i++) res = (res*f[i])%10; printf("%d\n", res); return 0; }
时间: 2024-10-12 17:53:24