题目
求出n的阶乘末尾有多少个0.
Input: 3
Output: 0
Input: 30
Output: 7
思路
如果强行求解n的阶乘, 时间复杂度太高.
求解多少个0, 就需要对10进行因式分解, 分解为质数.
n的阶乘里面2肯定比5多, 只要有5就移动能构成10.
因此主要需要求5的个数.
如果一个数除以5的余数就有多少个5, 除以25的余数就有多少个25...
int trailingZeroes(int n) {
int res = 0;
long num = 5;
vector<int> dp;
while (num <= n) {
int left = n / num;
num *= 5;
res += left;
}
return res;
}
总结
转换思维, 转换问题求解对象.
网友评论