10000的阶乘有多少位
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10000的阶乘有多少位相关的知识,希望对你有一定的参考价值。
以下是将阶乘转为对数计算的lua程序:s=0.0
for i=1,10000 do
s=s+math.log10(i)
end
print(s)
计算结果为:35659.454274521
也就是所 10000! 有 35660 位数。 参考技术A 回答
你好,10000的阶乘是一个35660位的正整数。所以,只能用科学记数法来表示:10000! = 2.84625968091705451890641321211986889*10^35659
2.尾部的零
题目要求出阶乘尾部后有多少个0,其实就是问阶乘里面有多少个10.所以这个问题也就可以等效于问表示阶乘这个数的质因数分解总共有多少个2与5,而2的个数肯定比5的个数多,所以我们只需要求出有多少个5就行了。而质因数分解一个数里有多少个5可以用公式:\(n/5+n/5/5+n/5/5/5+……\)来进行计算。
很多博客都介绍了这种算法,但是没有讲解具体的计算原理(或许是因为有些简单)。这里,我们假设要求1到100里质因数分解后5的个数,首先肯定是先找5的倍数,即5,10,15,20,25……。注意到它们可以表达为\(5*k\)的形式,即5{1,2,3,4,5,6,7,8,9,10,11……}。而k的表示里又有5的倍数,问题就等价于求m={1,2,3,4,5,6,7,8,9,10,11……}里有多少个5,而m的总数为100/5=20个;显然m={1,2,3,4,5,6,7,8,9,10,11……}里5的倍数又可以表示为
\(5*s\),其中s的个数为20/5(100/5/5)。接下来持续进行上述操作即可。最后5的个数为k+m+s+……
通过这个简单的例子我们可以看出求1到100里有多少个质因数5的过程是迭代进行计算的,即先求出一个数n里有多少个5,在求出n/5里有多少个5,在求出n/5/5/5里有多少个5,以此类推,和我之前提出的算法是相同的。
代码如下:
class Solution {
public:
/*
* @param n: A long integer
* @return: An integer, denote the number of trailing zeros in n!
*/
long long trailingZeros(long long n) {
// write your code here, try to do it without arithmetic operators.
long count=0;
while(n>0)
{
count+=n/5;
n=n/5;
}
return count;
}
};
以上是关于10000的阶乘有多少位的主要内容,如果未能解决你的问题,请参考以下文章
阶乘因式分解 给定两个数m,n,其中m是一个素数。 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。 输入第一行是一个整数s(0<s<=100)