当前位置 : 主页 > 编程语言 > java >

1×2×3×……×100的结尾有多少个连续的0?

来源:互联网 收集:自由互联 发布时间:2023-02-04
来自女儿的四年级数学作业,说实话我被问懵住了,思考了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));}

输出结果如下:

乘数2, 尾数2, 0个0乘数3, 尾数6, 0个0乘数4, 尾数24, 0个0乘数5, 尾数12, 1个0乘数6, 尾数72, 1个0乘数7, 尾数504, 1个0乘数8, 尾数32, 1个0乘数9, 尾数288, 1个0乘数10, 尾数288, 2个0乘数11, 尾数168, 2个0乘数12, 尾数16, 2个0乘数13, 尾数208, 2个0乘数14, 尾数912, 2个0乘数15, 尾数368, 3个0乘数16, 尾数888, 3个0乘数17, 尾数96, 3个0乘数18, 尾数728, 3个0乘数19, 尾数832, 3个0乘数20, 尾数664, 4个0乘数21, 尾数944, 4个0乘数22, 尾数768, 4个0乘数23, 尾数664, 4个0乘数24, 尾数936, 4个0乘数25, 尾数234, 6个0乘数26, 尾数84, 6个0乘数27, 尾数268, 6个0乘数28, 尾数504, 6个0乘数29, 尾数616, 6个0乘数30, 尾数848, 7个0乘数31, 尾数288, 7个0乘数32, 尾数216, 7个0乘数33, 尾数128, 7个0乘数34, 尾数352, 7个0乘数35, 尾数232, 8个0乘数36, 尾数352, 8个0乘数37, 尾数24, 8个0乘数38, 尾数912, 8个0乘数39, 尾数568, 8个0乘数40, 尾数272, 9个0乘数41, 尾数152, 9个0乘数42, 尾数384, 9个0乘数43, 尾数512, 9个0乘数44, 尾数528, 9个0乘数45, 尾数376, 10个0乘数46, 尾数296, 10个0乘数47, 尾数912, 10个0乘数48, 尾数776, 10个0乘数49, 尾数24, 10个0乘数50, 尾数12, 12个0乘数51, 尾数612, 12个0乘数52, 尾数824, 12个0乘数53, 尾数672, 12个0乘数54, 尾数288, 12个0乘数55, 尾数584, 13个0乘数56, 尾数704, 13个0乘数57, 尾数128, 13个0乘数58, 尾数424, 13个0乘数59, 尾数16, 13个0乘数60, 尾数96, 14个0乘数61, 尾数856, 14个0乘数62, 尾数72, 14个0乘数63, 尾数536, 14个0乘数64, 尾数304, 14个0乘数65, 尾数976, 15个0乘数66, 尾数416, 15个0乘数67, 尾数872, 15个0乘数68, 尾数296, 15个0乘数69, 尾数424, 15个0乘数70, 尾数968, 16个0乘数71, 尾数728, 16个0乘数72, 尾数416, 16个0乘数73, 尾数368, 16个0乘数74, 尾数232, 16个0乘数75, 尾数174, 18个0乘数76, 尾数224, 18个0乘数77, 尾数248, 18个0乘数78, 尾数344, 18个0乘数79, 尾数176, 18个0乘数80, 尾数408, 19个0乘数81, 尾数48, 19个0乘数82, 尾数936, 19个0乘数83, 尾数688, 19个0乘数84, 尾数792, 19个0乘数85, 尾数732, 20个0乘数86, 尾数952, 20个0乘数87, 尾数824, 20个0乘数88, 尾数512, 20个0乘数89, 尾数568, 20个0乘数90, 尾数112, 21个0乘数91, 尾数192, 21个0乘数92, 尾数664, 21个0乘数93, 尾数752, 21个0乘数94, 尾数688, 21个0乘数95, 尾数536, 22个0乘数96, 尾数456, 22个0乘数97, 尾数232, 22个0乘数98, 尾数736, 22个0乘数99, 尾数864, 22个0乘数100, 尾数864, 24个0

原来答案是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。

上一篇:从0开始创建FX3工程之一 - 框架
下一篇:没有了
网友评论