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

来自女儿的四年级数学作业,说实话我被问懵住了,思考了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。

检验一下:

乘数2, 尾数2, 0个0
...
乘数124, 尾数704, 28个0
乘数125, 尾数88, 31个0
...
乘数249, 尾数952, 59个0
乘数250, 尾数238, 62个0
...
乘数374, 尾数552, 90个0
乘数375, 尾数207, 93个0
...
乘数499, 尾数728, 121个0
乘数500, 尾数364, 124个0
...
乘数624, 尾数256, 152个0
乘数625, 尾数16, 156个0
...
乘数749, 尾数264, 184个0
乘数750, 尾数198, 187个0
...
乘数874, 尾数392, 215个0
乘数875, 尾数343, 218个0
...
乘数1000, 尾数472, 249个0

 可以看到乘数是上面提到的几个特殊数字时,末尾0的增长情况是符合预期的。

 

posted on 2022-12-22 23:35  BoyTNT  阅读(444)  评论(0编辑  收藏  举报

导航