Nie mogę przechować dużej wartości w long long int

0

Siemka, mam problem mianowicie.
deklaruje zmienną typu unsigned long long i nie daje rady przechować liczby 333 338 333 350 000, a powinien móc gdyż jego zakres "ponoć" to od 0 do 18 446 744 073 709 551 615.

Na dodatek gdy robię tak
unsigned long long int n=4294967295
Jest ok, ale jak zwiększę chociażby o 1 już to wyskakuje błąd
warning: this decimal constant is unsigned only in ISO C90

czyli tak jakby czytał to jako zwykłego inta, ale jak zrobię sizeof to zajmuje 8 bajtów...

Mógłby ktoś mi to wytłumaczyć?

1
unsigned long long int n = 333338333350000ull;
0

Kompiluj w trybie C99.

1

@XeonAH510: Tak, wynik wyrażenia jest typu int ponieważ oba operandy są tego typu.
Można również rozwiązać to inaczej:

     for(int i=1;i<100000;i++)
     {
         suma+=(long long int)i*i;
     }

Wtedy rezultat będzie typu long long int, bo taki typ ma większy operand.

1

Może nieco szybsze będzie:

long long int V=1;
for(int i=1;i<100000;V+=i,V+=++i) Sum+=V;

Aczkolwiek kosztem czytelności.

1 użytkowników online, w tym zalogowanych: 0, gości: 1