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;
}