不如数5,数0不如数5

zhangwch  •  1个月前


要数0有多少,第一反应自然是看有多少数字是10的倍数。
可是,2的倍数和5的倍数相乘也能获得10的倍数,于是问题变成了找出2的倍数、5的倍数、10的倍数。
再仔细一想,关键不是2、5、10,关键在于5:
5作为因子在[1,n]中出现了多少次,就会有多少个0(因为2足够多,反正比5多)。

问题就转变成了,[1,n]中的每个数,能提供多少个5.

#include<iostream>
using namespace std;

int main(){
	long long n;
	cin >> n;
	int ans = 0;
	for (long long i = 5; i <= n; i *= 5) {
		ans += n / i;
	}
	cout << ans;
    return 0;
}


Comments: