prova ad usare %e al posto di %f

edit:
ho provato con:

printf("%d\t%-2.2e\n",N, n);

Come risultato ottengo:

codice:
...
12      4.79e+008
13      6.23e+009
14      8.72e+010
15      1.31e+012
16      2.09e+013
17      3.56e+014
18      6.40e+015
19      1.22e+017
20      2.43e+018
21      5.11e+019
22      1.12e+021
...
Ecco, usando double come suggerito e %e arrivo fino a 170:

codice:
#include<stdio.h>
int main()
{
        double n = 1;
        unsigned long N = 1;
        while(N <= 175){
                n*=N;
                printf("%u\t%2.2e\n",N, n);
             //sleep(1);   
                N++;
        }
}
codice:
...
167     1.50e+300
168     2.53e+302
169     4.27e+304
170     7.26e+306
171     1.#Je+000
172     1.#Je+000
173     1.#Je+000
174     1.#Je+000
175     1.#Je+000