Pagini recente » Cod sursa (job #2389627) | Cod sursa (job #1028030) | Cod sursa (job #873138) | Cod sursa (job #2693536) | Cod sursa (job #1496654)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("fact.in");
ofstream g("fact.out");
long long pow5[30],nr[30],suma[30],num[30];
int main()
{int i;
pow5[1]=5;
for(i=2;i<=28;i++)pow5[i]=pow5[i-1]*5;
suma[1]=1;
nr[1]=1;
for(i=2;i<=28;i++)
{nr[i]=pow5[i-1]-suma[i-1];
suma[i]=suma[i-1]+nr[i];
}
//formare vector numar de 0 in factorial de 5 la puterea i
int j;
for(i=1;i<=28;i++)
{num[i]=0;
for(j=1;j<=i;j++)
num[i]+=nr[j]*(i-j+1);
}
long long n,rez=0,cat,rest;
f>>n;
if(n==5){g<<-1;return 0;}
while(n)
{
for(i=1;i<20 && num[i+1]<=n;i++);
cat=n/num[i];
rest=n%num[i];
if(i>1 && (cat>=5 || rest>=5))
{
g<<"-1";return 0;
}
rez+=cat*pow5[i];
n=rest;
}
g<<rez;
}