首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C/C++面试题甄选

2012-07-31 
C/C++面试题精选1000的阶乘有多少位?有多少个连续的0?有个阶乘公式例如1000阶乘位数: log10(1)log10(2)···

C/C++面试题精选
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!, 
则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。

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

热点排行