2^30 < INT_MAX = 2^31 -1
UINT_MAX = 2^32 -1
PS
Gdybyś przypadkiem testował swój kod dla testu:
100
99
98
...
to lepiej nie zapisuj wyniku [nie przekierowuj] do pliku, lub zrób to na ideone.com
PS 2
A najlepiej to policz na palcach, 100 liczb od n =100 w "dół".
PS 3
Można założyć, że zawsze long int == int. Może w systemach 8 czy 16 bitowych [są jeszcze takie] jest inaczej.
PS 4
Taka pętla, dla n = 100, "kręci" [przekręca się] w nieskończoności spokokoko kokoko ...
a taka, :
for(unsigned int i = n; i > n - 100; i--)
w analogicznym przypadku, jest już SPOKO
Dodatkowo, ta pierwsza pętla, dla innych n, da WA, więc błędem nie jest samo użycie unsigned, ale zbieg [splot] nieszczęśliwych okoliczności 