【USACO】阶乘
时间限制: 1 Sec 内存限制: 16 MB题目描述
阶乘的定义如下: N! = 1 * 2 * 3 * ... * N-1 * N 例如, 12! = 1*2*3*4*5*6*7*8*9*10*11*12 = 479001600 最右的非0位是6,后面有2个0。 写一个程序计算N!最右非0位和末尾的0的个数。
输入
一个整数N, 1 <= N <= 1,000,000
输出
一行输出2个整数:最右非0位,末尾0的个数。
样例输入
12
样例输出
6 2
要注意的是取余的时候不能只取%10,不然会WA的,这是我做阶乘之和总结的。
AC代码:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int n,i,j; long long k; cin >> n; for(i=1,k=1,j=0;i<=n;++i) { k*=i; while(!(k%10)) { k/=10; j++; } k%=100000; } cout << k%10 << " " << j << endl; return 0; }