Cod sursa(job #568097)

Utilizator XladhenianGrigorita Vlad-Stefan Xladhenian Data 30 martie 2011 20:13:21
Problema Factorial Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb

#include <iostream>
#include <fstream>
using namespace std;

#define MM 20

long long Levels[MM];
long long Level5[MM];
long long N;
long long Fact;
long long FactLevel;

int main(void)
{
 fstream f1("fact.in",ios::in);
 fstream f2("fact.out",ios::out);
 f1 >> N;
 if (N < 0)
   {
    f2 << (-1);
    f1.close();
    f2.close();
    return 0;
   }
 if (N == 0)
   {
    f2 << (signed int)(1);
    f1.close();
    f2.close();
    return 0;
   }
 Levels[0] = 1;
 Level5[0] = 5;
 for (int i = 1;i < MM;i = i + 1)
  {
   Levels[i] = Levels[i - 1] * 5 + 1;
   Level5[i] = Level5[i - 1] * 5;
  }
 Fact = 0;
 FactLevel = MM - 1;
 while (N > 0)
  {
   if (((N - Levels[FactLevel]) >= -FactLevel) && ((N - Levels[FactLevel]) < 0))
     {
      f2 << (signed int)(-1);
      f1.close();
      f2.close();
      return 0;
     }
   while ((N - Levels[FactLevel]) >= 0)
    {
     N = N - Levels[FactLevel];
     Fact += Level5[FactLevel];
    }
   if (FactLevel) if (!N)
     {
      f2 << (-1);
      f1.close();
      f2.close();
      return 0;
     }
   FactLevel--;
  }
 f2 << Fact;
 f1.close();
 f2.close();
 return 0;
}