算出N的阶乘(N!)一共有多少位

来源:互联网 发布:淘宝网司法拍卖流程 编辑:程序博客网 时间:2024/04/29 21:15
这是一道国外Apple公司的面试题,需要高等数学知识

输入任意一个数字N(N>=1) 算出N的阶乘(N!)一共有多少位

比如输入10
10! = 3628800
10的阶乘是 3628800
位数为7

在比如输入25
25! = 15511210043330985984000000
一共有 26位

注意不能把某个数的阶乘算出在统计位数

这里方便测试,给三个阶乘数字例子:
56 !=
710998587804863451854045647463724949736497978881168458687447040000000000000

123! =
1214630436702532967576624324188129585545421708848338231532891816182923589236216766883115696061264020
2170735835221294047782591091570411651472186029519906261646730733907419814952960000000000000000000000
000000

345! =
2421563865079234655870005369198585557012055604025865273483978326703996172017832359317473904791361707
9695531502689473012213820889134885853992818438056445080201482863675240494802269823110125881000284687
3771043764007922001651278559084980475073479554466030939643269870873113942746842373083985029113049697
1971509806802549750490073058021701657327001169846737892429155078087360515473687954260255463555842826
5690302091342359471863508627516511203478353542187151045838267239168928747525890559708487655213488727
5308849685587163850004369891294795278330103405177606883453687157290200153368625343538769148712017766
9920587866285855585726554423099917844925644800000000000000000000000000000000000000000000000000000000
0000000000000000000000000000


python测试脚本(python a.py):
#!/usr/bin/env python

n=999
n = int(raw_input("input your number:"))
print reduce(lambda x,y:x*y, range(1,n+1))

C:
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[])
{
int i,n;
double sum=0.0;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
sum+=log10(i);
}
if(n==1)
sum=1;
printf("%d",(int)ceil(sum));
return 0;
}
0 0