Cod sursa(job #2550281)

Utilizator horiacoolNedelcu Horia Alexandru horiacool Data 18 februarie 2020 17:59:26
Problema Factorial Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <limits>
using namespace std;

ifstream fin("fact.in");
ofstream fout("fact.out");

#define LL long long int
#define ULONG_MAX 4294967295

int main() {
	LL P;
	LL N = 0, countP = 0, pow5 = 1;

	fin >> P;

	if (P != 0) {
		P++;
	} else {
		fout << 1;
		return 0;
	}

	while (N < ULONG_MAX) {
		N += 4 * pow5;
		countP += (pow5 - 1);
		pow5 *= 5;
	}

	pow5 /= 5;
	for (; pow5 > 0; pow5 /= 5) {
		if (countP == P)
			break;

		if (countP >= P) {
			countP -= (pow5 - 1) / 4;
			N -= pow5;

			if (countP >= P) {
				countP -= (pow5 - 1) / 4;
				N -= pow5;

				if (countP >= P) {
					countP -= (pow5 - 1) / 4;
					N -= pow5;

					if (countP >= P) {
						countP -= (pow5 - 1) / 4;
						N -= pow5;
					}
				}
			}
		}

		// if (countP - (pow5 - 1) / 4 >= P) {
		// 	countP -= (pow5 - 1) / 4;
		// 	N -= pow5;

		// 	if (countP - (pow5 - 1) / 4 >= P) {
		// 		countP -= (pow5 - 1) / 4;
		// 		N -= pow5;

		// 		if (countP - (pow5 - 1) / 4 >= P) {
		// 			countP -= (pow5 - 1) / 4;
		// 			N -= pow5;

		// 			if (countP - (pow5 - 1) / 4 >= P) {
		// 				countP -= (pow5 - 1) / 4;
		// 				N -= pow5;
		// 			}
		// 		}
		// 	}
		// }
	}

	if (P != 0) {
		N -= 4;
		fout << N;
	} else {
		fout << 1;
	}

	return 0;
}