Pagini recente » Cod sursa (job #2550095) | Cod sursa (job #3290196) | Cod sursa (job #1441826) | Cod sursa (job #3270868) | Cod sursa (job #1821406)
#include <fstream>
#define nsz 29
using namespace std;
long long n, sol, powersOf5[nsz + 1], numOfZerosByPowOf5[nsz + 1], partialSumOfNumOfZerosByPowOf5[nsz + 1];
ifstream fin("fact.in");
ofstream fout("fact.out");
int main()
{
fin >> n;
powersOf5[0] = 1;
for (int i = 1; i <= nsz; i++)
{
powersOf5[i] = powersOf5[i - 1] * 5;
numOfZerosByPowOf5[i] = numOfZerosByPowOf5[i - 1] + powersOf5[i] / 5;
partialSumOfNumOfZerosByPowOf5[i] = partialSumOfNumOfZerosByPowOf5[i-1] + numOfZerosByPowOf5[i];
}
if (n == 0)
sol = 1;
while (n > 0)
{
int i = 1;
while (n >= numOfZerosByPowOf5[i + 1] && i < 30)
i++;
if (n <= 4 * partialSumOfNumOfZerosByPowOf5[i])
{
int d = (int)n / numOfZerosByPowOf5[i];
n -= d * numOfZerosByPowOf5[i];
sol += d * powersOf5[i];
}
else
{
n = -1;
}
}
if (n == 0)
fout << sol;
else
fout << "-1";
return 0;
}