来自女儿的四年级数学作业,说实话我被问懵住了,思考了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。
标签:24,12,20,结尾,16,尾数,多少,100,乘数 From: https://www.cnblogs.com/BoyTNT/p/16999817.html