Raczej nie, dla __int64 maksymalnie da się obliczyć silnię dla 20 (20!=2432902008176640000, max dla __int64 to 9223372036854775807)
Fakt! Nie przeliczałem tego pisemnie, tylko oparłem się na wyniku wygenerowanym przez program, a że wyskoczyła liczba całkowita to uznałem, że jest prawidłowa, ale przy n = 21 otrzymujemy już wynik ujemny, więc nieprawidłowy:
W funkcji silnia argument jest typu __int64, nastąpi konwersja int

__int64. Gdzie jest błąd?
Szczerze przyznaję - spekulowałem, uznałem, że skoro przy zmiennej __int64 uzyskał n < 13, to musi być błąd w przekazywaniu do funkcji zmiennej 32-bitowej zamiast 64 bitowej, niemniej n nie jest liczbą 64-bitową, więc rzeczywiście nie stanowi to problemu.
Zastanawiające jest dla mnie dlaczego przy n = 39 funkcja zwraca liczbę całkowitą dodatnią...