public static void Main()
while ((input = int.Parse(Console.ReadLine())) != 0)
long factorial = CalculateFactorial(input);
Console.WriteLine(factorial.ToString());
Console.WriteLine(GetPrecedingNumbers(input, factorial));
private static long CalculateFactorial(int input)
long factorial = (long)input;
for (int i= 1; i < input; i++)
factorial = factorial * i;
private static string GetPrecedingNumbers(int input, long factorial)
int firstZeroIndex = FindFirstIndexOfTrailingZeroes(input, factorial);
string factorialWithoutZeroes = factorial.ToString().Substring(0, firstZeroIndex - 0);
return factorialWithoutZeroes.Length > 3 ? factorialWithoutZeroes.Substring(factorialWithoutZeroes.Length - 3) : factorialWithoutZeroes;
private static int FindFirstIndexOfTrailingZeroes(int input, long factorial)
int zeroCount = CalculateNumberOfTrailingZeroes(input);
return factorial.ToString().Length - zeroCount;
private static int CalculateNumberOfTrailingZeroes(int num)
for (int i = 5; (num / i) > 0; i = i * 5)
Console.WriteLine("Count: " + count.ToString());