C/C++面试题精选

来源:岁月联盟 编辑:exp 时间:2012-07-13

1000的阶乘有多少位?有多少个连续的0?
有个阶乘公式
例如1000阶乘位数:
log10(1)+log10(2)+···+long10(1000)取整后加1
或者
log(N!)=lnN!/ln10
=(NlnN-N)/ln10
=2565.7

本来有一种方法可以获取阶乘结果的位数的,但是要计算N个LOG10,时间上不好,所以放弃这种方法:
设位数为x,
列等式10^x=N!,  www.2cto.com
则x=log10(N!)
则x=log10(1)+log10(2)+log10(3)+...+log10(N),
最后x向上取整就行了

//////////////////////////////////////////////////////////////////////////////

每出现一个2和5,就会在末尾有一个0,所以只要看,从1
到1000中总共有多少个2和5就可以了,又因为5总比2少,所以,只要看1000的阶乘中有多少个约数5就可以了。同样,只有末尾是0或者5的数才会有5,所以总共只有200个数其中包含5,但是,其中有1000/25=40个数包含2个5,1000/125=8个数包含三个5,1000/625=1个数包含4个5,所以总共有200+40+8+1=249个5,所以结果里总共有249个连续的0。

/////////////////////////////////////////////////////////////////////////


作者:fengzhishang2019