程序员

FCTRL - Factorial

2020-04-28  本文已影响0人  waaagh

题目大意:求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;
}

参考:
https://en.wikipedia.org/wiki/Trailing_zero#Factorial

上一篇 下一篇

猜你喜欢

热点阅读