Só por curiosidade, alguém sabe porque alguns resultados do fatorial dão negativo, mesmo usando long?
long fatorial = 1L;
for (int y = 1; y < 51; y++) {
fatorial *= y;
System.out.println("Fatorial de "+ y + " = " + fatorial);
}