172. Factorial Trailing Zeroes
Total Accepted: 63051 Total Submissions: 188884 Difficulty: Easy
Given an integer n, return the number of trailing zeroes in n!.
思路:统计n!中5的个数。但要注意5的次方数的存在。
关于为什么特定数n,n!中2的个数要大于5的个数:n=2a=5b(a,b可以不为整数),显然a>b。
第1次除以2,相当于筛除[1,n]中只含1个2的数;
第2次除以2,相当于筛除[1,n]中只含2个2的数;
第3次除以2,相当于筛除[1,n]中只含3个2的数;
。。。。
代码:
方法一:
1 class Solution { 2 public: 3 int trailingZeroes(int n) { 4 int zeros=0; 5 while(n){ 6 n/=5; 7 zeros+=n; 8 } 9 return zeros; 10 } 11 };
方法二:
1 class Solution { 2 public: 3 int trailingZeroes(int n) { 4 return n==0?0:n/5+trailingZeroes(n/5); 5 } 6 };