题目大意:求N!尾部有几个0。
思路:dp,很容易想到0的个数跟2和5有关,但2的个数多,因此由5决定。设dp(n)为n!尾部0的个数,公式:dp(n) = dp(n/5) + n/5。
实现:不需要dp[]存状态,n只跟n/5相关,滚动起来即可。
代码:
#include <iostream>
using namespace std;
#define LL long long
LL sum;
int main() {
int t, N;
scanf("%d", &t);
for(int i=0; i<t; i++) {
scanf("%d", &N);
sum = 0;
while(N) {
sum += 1LL*N/5;
N/=5;
}
cout << sum << endl;
}
return 0;
}
网友评论