In realtà già a 13 avrai un risultato non corretto.

Questo perché il 13! è maggiore del più grande numero che puoi esprimere con la tua variabile a 32 bit (int).

Devi usare una variabile con maggiore capacità ... ad esempio un long long (ovvero un __int64) ma il problema si sposta solo un po' più in là ...