Pagini recente » Cod sursa (job #2323262) | Cod sursa (job #1743301) | Cod sursa (job #1334907) | Cod sursa (job #2548878) | Cod sursa (job #1605068)
#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];
for(int i = 0; i < 10; i++)
{
numar[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;
}
int numarx[10];
for(int i = 0; i < 10; i++)
{
numarx[i] = 0;
}
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;
}
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;
}