Cod sursa(job #349652)
Utilizator | Porcescu Alexandru TFifes | Data | 20 septembrie 2009 21:46:07 |
---|---|---|---|
Problema | Factorial | Scor | 5 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.07 kb |
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
int main ()
{
short s=0,i;
ifstream x("fact.in");
ofstream y("fact.out");
unsigned long v[13];
for(i=0;i<13;i++)
v[i]=pow(5,i+1);
unsigned long p,a,b,c,nr,d;
a=0;
b=2000000000;
x>>p;
if(p==0)
{
y<<1;
x.close();
y.close();
return 0;
}
do
{
c=(a+b)/2;
d=c;
while(c%5==0)
{
for(i=12;i>=0;i--)
{
if(c%v[i]==0)
{
c=c/v[i];
nr+=i+1;
}
}
}
if(nr==p)
{
s=1;
y<<b;
}
if(nr>p)
{
b=d-1;
}
else
{
a=d+1;
}
}
while(s!=1);
if(s==0)
y<<-1;
x.close();
y.close();
return 0;
}