Pagini recente » Cod sursa (job #1180181) | Cod sursa (job #73755) | Cod sursa (job #1599833) | Cod sursa (job #2863429) | Cod sursa (job #2460675)
#include <fstream>
#include <cmath>
#include <iostream>
int numDigitsFact(int numar) {
if (numar < 0) return -1;
else if (numar <= 1) return 1;
else {
double x = ((numar * std::log10(numar / M_E) +
std::log10(2 * M_PI * numar) / 2.0));
return std::floor(x) + 1;
}
}
int findNum(int n) {
int low = 0, high = 2 * n;
if (n <= 0) return -1;
if (numDigitsFact(low) == n)
return low;
else {
int mid = low + (high - low) / 2;
if (numDigitsFact(mid) >= n &&
numDigitsFact(mid - 1) < n)
return mid;
else if (numDigitsFact(mid) < n)
low = mid + 1;
else high = mid - 1;
}
return low;
}
int main()
{
std::ifstream in("fact.in");
std::ofstream out("fact.out");
int numar;
in >> numar;
out << findNum(numar) << '\n';
return 0;
}