Pagini recente » Cod sursa (job #760303) | Cod sursa (job #1631870) | Borderou de evaluare (job #2421000) | Cod sursa (job #1116270) | Cod sursa (job #807335)
Cod sursa(job #807335)
#include <iostream>
#include <fstream>
using namespace std;
int number_of_zeros(int number) {
int zeros = 0;
while (number / 5) {
zeros += number / 5;
number /= 5;
}
// cout << "zeros: " << zeros << endl;
return zeros;
}
int binary_search(int left, int right, int p) {
int middle;
int zeros;
int solution = 0;
bool found = false;
while (left < right) {
/*cout << "left: " << left << endl;
cout << "middle: " << middle << endl;
cout << "right: " << right << endl;*/
middle = right - (right - left) / 2;
zeros = number_of_zeros(middle);
if (zeros > p) {
right = middle - 1;
}
if (zeros < p) {
left = middle + 1;
}
if (zeros == p) {
solution = middle;
found = true;
if (right == middle) {
--right;
} else {
right = middle;
}
}
}
if (found) {
return solution;
} else {
return -1;
}
}
int main() {
int left = 0;
int right = 500000000;
int p;
int number;
ifstream input;
ofstream output;
input.open("fact.in");
input >> p;
input.close();
// if (p == 0) {
// number = 1;
//} else {
number = binary_search(left, right, p);
// if (number != -1) {
// for (; number_of_zeros(number) == p; --number);
// ++number;
// }
//}
output.open("fact.out");
output << number;
output.close();
return 0;
}