100的阶乘末尾连续0的个数是多少?
- 内容介绍
- 文章标签
- 相关推荐
本文共计874个文字,预计阅读时间需要4分钟。
来自女儿的四年级数学作业,实话说我被问住了,思考了2分钟,初步能确定的不小于20,但具体是多少一时还想不起。数学水平不行,但编程水平还凑合,立即上手,几行代码的事。

来自女儿的四年级数学作业,说实话我被问懵住了,思考了2分钟,初步能确定肯定不小于20,但具体是多少一时还没想清。咱数学水平不行,但编程水平行啊,立即上手,几行代码的事:
int zeros = 0;int number = 1;for(int i = 2;i <= 100;++i) { number *= i; while(true) { if(number % 10 == 0) { //尾数是0,计数 zeros++; number = number / 10; } else { //尾数不是0,只保留几位参与下次计算即可,不用关心头部数字 number = number % 1000; break; } } System.out.println(String.format("乘数%d, 尾数%d, %d个0", i, number, zeros));}输出结果如下:

原来答案是24个0,有了答案再反回去想,其实也不复杂,要计算有多少个0,其实就是看乘积出10的可能性,5是关键因子,每隔5个数出现一次,1-100内共有20个,但还要考虑特殊情况,5×5=25,对25来说,除了贡献了一次5,它的乘积尾数也是5,也就是又贡献了1个。同理50、75、100也是各贡献了1个,因此最终结果是20+4=24。
从输出结果也能看到在乘数是5和0的时候,0的个数会涨,在乘数是25、50、75、100的时候,0的个数会多涨1个。
如果是计算1000阶乘的末尾0,那还要再多考虑5×5×5=125的情况,它又多贡献一个5,同理250、375、500、625、750、875、1000也是,另外别忘了5×5×5×5=625又贡献了1个,因此总数是200+40+8+1=249。
本文共计874个文字,预计阅读时间需要4分钟。
来自女儿的四年级数学作业,实话说我被问住了,思考了2分钟,初步能确定的不小于20,但具体是多少一时还想不起。数学水平不行,但编程水平还凑合,立即上手,几行代码的事。

来自女儿的四年级数学作业,说实话我被问懵住了,思考了2分钟,初步能确定肯定不小于20,但具体是多少一时还没想清。咱数学水平不行,但编程水平行啊,立即上手,几行代码的事:
int zeros = 0;int number = 1;for(int i = 2;i <= 100;++i) { number *= i; while(true) { if(number % 10 == 0) { //尾数是0,计数 zeros++; number = number / 10; } else { //尾数不是0,只保留几位参与下次计算即可,不用关心头部数字 number = number % 1000; break; } } System.out.println(String.format("乘数%d, 尾数%d, %d个0", i, number, zeros));}输出结果如下:

原来答案是24个0,有了答案再反回去想,其实也不复杂,要计算有多少个0,其实就是看乘积出10的可能性,5是关键因子,每隔5个数出现一次,1-100内共有20个,但还要考虑特殊情况,5×5=25,对25来说,除了贡献了一次5,它的乘积尾数也是5,也就是又贡献了1个。同理50、75、100也是各贡献了1个,因此最终结果是20+4=24。
从输出结果也能看到在乘数是5和0的时候,0的个数会涨,在乘数是25、50、75、100的时候,0的个数会多涨1个。
如果是计算1000阶乘的末尾0,那还要再多考虑5×5×5=125的情况,它又多贡献一个5,同理250、375、500、625、750、875、1000也是,另外别忘了5×5×5×5=625又贡献了1个,因此总数是200+40+8+1=249。
