本文共 934 字,大约阅读时间需要 3 分钟。
第一种思路:每一次求阶乘,截断最后面的零,取最后面的一部分,这种方法有很大的偶然性,不适合一般计算,下面的 sum %= 10000 是小编疯狂的提交最后的出来的结论,仅对此题有效。
class Solution { public: int trailingZeroes(int n) { int sum = 1, target = 0; while(n >= 1) { sum *= n; --n; while(sum % 10 == 0) { sum /= 10; ++target; } sum %= 10000; } return target; }};
一般性算法:在求 阶乘的过程中,只要末尾出现了 2 * 5 的组合,那么必然会出现一个 零,例如 4 * 5, 8 * 25,等等等等,而对于每一个 5来说,中间至少会有 2、4 三个 2 ,所以我们只需要统计 5 因子在所有数中出现的情况就可以了。
class Solution { public: int trailingZeroes(int n) { int sum = 0; for(int i = 1; i <= n; ++i) { if(i % 5 == 0) { int j = i; do { ++sum; j /= 5; }while(j % 5 == 0); } } return sum; }};
转载地址:http://cfeoz.baihongyu.com/