Si tu obtien des nombres négatifs après un certain temps, c'est certainement parce que tu utilise une variable signé. La limite d'une variable signé codé sur 32 bits est 2147483647 je crois. Pour une variable non signé c'est 4294967295.
Quoi qu'il en soit, on ne peut pas aller plus haut que ces limites avec une variable 32 bits (int, long). Va falloir travailler directement en mémoire. Fait une rechercehe sur ce site, il y a des exemples de ce genre.
C++ (@++)