1024!的末尾有多少个0
最简单能想到的就是直接计算出1024阶乘的值,但显然这样效率十分低下,其次数值过大会造成内存溢出。
考虑阶乘时如何会出现0,根据小学数学计算知识可以想到5是关键,5乘以偶数时会出现0为结尾的数字,而1~1024这些数中5的个数显然远小于偶数,即5的个数决定了尾数0的个数。
而其中 25=55 ,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;
}

浙公网安备 33010602011771号