思路:对于有几个0,10一定会是5的整数倍,2的因子数一定比5的多,所以只要算5的个数即可,
30%,每个n都去算
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll check(ll n) { //计算n!末尾有多少个0ll cnt = 0;while (n) cnt += (n /= 5); return cnt;
}
int main(){ll k; cin >> k;for(ll n=5;;n+=5){ //n是5的倍数,它含有因子5ll cnt = check(n); //cnt是n!的尾零数量if(cnt==k){ cout << n; break;}if(cnt>k) { cout <<-1; break;}}return 0;
}
100%,利用二分思想
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll check(ll n) { //计算n!末尾有多少个0ll cnt = 0;while (n) cnt += (n /= 5);return cnt;
}
int main() {ll k; cin >> k;ll L = 0, R = 1e19; //R的初值为一个极大的数while (L < R) {ll mid = (L + R) / 2;if (check(mid) >= k) R = mid; // mid!的尾零数量超过了k,说明mid大了else L = mid + 1; // mid小了}if (check(R) == k) cout << R ;else cout << -1;return 0;
}