Pagini recente » Cod sursa (job #592455) | Cod sursa (job #359424) | Cod sursa (job #864759) | Cod sursa (job #2404500) | Cod sursa (job #1605109)
#include <cstdio>
using namespace std;
int n;
int puteri[] = {25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125, 6103515625};
int main()
{
freopen("fact.in", "r", stdin);
freopen("fact.out", "w", stdout);
scanf("%d", &n);
if(n == 0)
{
printf("1");
return 0;
}
int nr = 5 * n;
int largest = -1;
for(int i = 12; i >= 0; i--)
{
if(nr >= puteri[i])
{
largest = i;
break;
}
}
int numar[10];
int numarx[10];
int nnumar[10];
int nnnumar[10];
for(int i = 0; i < 10; i++)
{
numarx[i] = 0;
numar[i] = 0;
nnumar[i] = 0;
nnnumar[i] = 0;
}
for(int i = largest; i >= 0; i--)
{
numar[i] = nr / puteri[i];
}
for(int i = 8; i >= 0; i--)
{
numar[i] -= numar[i + 1];
}
for(int i = 0; i < 10; i++)
{
nr -= numar[i] * (i + 1) * 5;
}
for(int i = largest; i >= 0; i--)
{
nnumar[i] = nr / puteri[i];
}
for(int i = 8; i >= 0; i--)
{
nnumar[i] -= nnumar[i + 1];
}
for(int i = largest; i >= 0; i--)
{
numarx[i] = nr / puteri[i];
}
for(int i = 8; i >= 0; i--)
{
numarx[i] -= numarx[i + 1];
}
for(int i = 9; i >= 0; i--)
{
nr += (numar[i] - numarx[i]) * (i + 1) * 5;
}
for(int i = largest; i >= 0; i--)
{
nnnumar[i] = nr / puteri[i];
}
for(int i = 8; i >= 0; i--)
{
nnnumar[i] -= nnnumar[i + 1];
}
for(int i = 0; i < 8; i++)
{
numar[i] = nnnumar[i] - nnumar[i];
}
for(int i = 9; i >= 0; i--)
{
nr -= numar[i] * (i + 1) * 5;
}
int tmp = nr;
int verificare = 0;
for(int i = largest; i >= 0; i--)
{
verificare += (tmp / puteri[i]);
}
verificare += tmp / 5;
if(verificare != n)
{
printf("-1");
return 0;
}
printf("%d", nr);
return 0;
}