阶乘(factorial)
Description
n的阶乘定义为 。
n的双阶乘定义为 (n为偶数)或 (n为奇数)。
但是阶乘的增长速度太快了,所以我们现在只想知道 和 末尾的 的个数。
Input
一个正整数
Output
两个整数,分别为 和 末尾 的个数。 l两个整数之间用一个空格隔开。
Sample Input
10
Sample Output
2 1
HINT
【样例1解释】
【样例2解释】
解题思路
证明
众所周知 要知道某一个数末尾的 的个数
就要知道其中有多少个 因数
又因为
所以 每出现一个 和一个 ,末尾就会多一个
而通常一个关于阶乘式子中 出现的次数比 出现的次数低
所以每有一个5,阶乘末尾就会多出来一个0(一些没有不会出现 的式子除外)
证毕
而最稳妥的方法是计算式子里 和 分别出现的次数,取最小
#include <bits/stdc++.h>
using namespace std;
int n, t, cnt;
void js()
{
while (t)
{
t /= 5;
cnt += t;
}
}
signed main()
{
cin >> n;
t = n;
js();
cout << cnt;
if (n & 1) //等同于 n%2==1
{
cout << " 0";
return 0;
}
else
{
t = n / 2;
cnt = 0;
js();
cout << " " << cnt;
}
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122174