Dato che num è int (e non long long) allora puoi lasciare

scanf("%d",&num);

Il resto va bene. Tieni conto che avrai comunque problemi dopo un certo valore (da 21)

Dovresti utilizzare librerie apposite come questa

GMP