1.5 Write an algorithm which computes the number of trailing zeros in n factorial.
EXAMPLE
input: 11
答案的算法更好一点,只有一层循环
EXAMPLE
input: 11
output: 2 (11! = 39916800)
末尾的0,来源肯定是某个数*10,而10=2*5。因为2总是比5个数多,所以只需要统计出因数5的个数即可。
比如1-11,包含5的有5和10,所以末尾有2个0。
25中包含2个5!
由此可以写出算法
<pre name="code" class="python">def main():
n=input()
ans=0
for i in range(5,int(n)+1,5):
j=i
while (j>=5 and j%5==0): //<span style="font-family: Arial, Helvetica, sans-serif;">j%5==0 don't forget </span>
j=j/5
ans+=1
print(ans)
if __name__=='__main__':
main()
答案的算法更好一点,只有一层循环
Note that while 5 contributes to one multiple of 10, 25 contributes two (because 25 = 5*5).
int NumOfTrailingZeros(int num) {
int count = 0;
if (num < 0) {
printf(“Factorial is not defined for negative numbers\n”);
return 0;
}
for (int i = 5; num / i > 0; i *= 5) {
count += num / i;
}
return count;
}
本文介绍了一种高效计算任意正整数阶乘末尾零的数量的算法。通过分析末尾零的产生原理,即由因数2和5相乘形成10导致,由于2的倍数通常多于5的倍数,只需统计5及其幂次作为因子出现的次数。给出了两种实现方法:一种是直观的逐个检查每个5的倍数;另一种更高效的算法则采用单层循环计算总数量。
1568

被折叠的 条评论
为什么被折叠?



