1024!的末尾有多少个0

最简单能想到的就是直接计算出1024阶乘的值,但显然这样效率十分低下,其次数值过大会造成内存溢出。
考虑阶乘时如何会出现0,根据小学数学计算知识可以想到5是关键,5乘以偶数时会出现0为结尾的数字,而1~1024这些数中5的个数显然远小于偶数,即5的个数决定了尾数0的个数。
而其中 25=5
5 ,25与偶数相乘时会出现两个0,因此以5为因数根据个数划分:

  • 至少含一个*5的数,即5的倍数 : 1024/5 = 204个;
  • 至少含两个*5的数,即25的倍数 : 1024/25 = 40个;
  • 至少含三个*5的数,即125的倍数 : 1024/125 = 8个;
  • 至少含四个*5的数,即625的倍数 : 1024/625 = 1个;

计算25的倍数时,这些数已经在5的倍数上计算过一次,因此下个阶段只是比上个阶段多了一个*5

总共*5 的个数为 204+40+8+1=253个,因此1024!末尾有253个0.

算法实现(java)

public static int solution1(int a){
        int count =0;//0的个数
        while(a>0){  //每次循环等于是算出 包含*5的个数
            a = a/5;
            count = count + a;
        }
        return count;
    }
posted @ 2020-06-17 18:03  热爱学习的繁星  阅读(463)  评论(0)    收藏  举报