Cod sursa(job #2460673)

Utilizator uneven-shiverAlecu Stefan-Iulian uneven-shiver Data 24 septembrie 2019 09:25:52
Problema Factorial Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <cmath>
#include <iostream>

int numDigitsFact(int n) {
  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;
}