Program liczący sumę liczb naturalnych wyświetla liczby ujemne
Ostatnio zmodyfikowano 2015-01-25 09:42
triglavv Temat założony przez niniejszego użytkownika |
Program liczący sumę liczb naturalnych wyświetla liczby ujemne » 2015-01-25 00:37:05 Program ma obliczać sumę liczb całkowitych od 1 do 1 000 000. W trakcie sumowania, po sumowaniu każdych kolejnych 85 liczb, ma wyświetlać aktualną sumę. Wydaje mi się, że wszystko jest w porządku, ale jak napisałem w temacie, skompilowany program wyświetla liczby ujemne i ogólnie sumy są oderwane od rzeczywistości. Wiem, że problem jest zapewne banalny, ale nie piętnujcie mnie, w końcu każdy kiedyś zaczynał. #include<iostream> using namespace std; int main() { int suma = 0; for( int i = 1; i <= 1000000; i++ ) { suma = suma + i; if( i % 85 == 0 ) { cout << suma << endl; } } system( "pause" ); return 0; } |
|
stryku |
» 2015-01-25 01:24:01 http://ujeb.se/MgOMCała suma jest dużo większa niż pojemność inta, więc występuje przepełnienie kilkudziesięcio(jeżeli nie kilkuset) krotne. Jeżeli chcesz taką sumę policzyć użyj typu o większym zakresie |
|
szarry |
» 2015-01-25 09:42:33 Jeśli chodzi o wartości ujemne, to należy zastosować typ unsigned *. Ostatni (najmłodszy) bit w liczbie reprezentuje znak, no i zmniejsza o połowę dostępny zakres. Proponuję uruchomienie dwóch kawałków kodu: char a = 0; while( 1 ) { std::cout <<( int ) a << std::endl; a++; }
unsigned char a = 0; while( 1 ) { std::cout <<( int ) a << std::endl; a++; }
$ program1 >> wynik1.txt [ctrl]+[d] $ program2 >> wynik2.txt [ctrl]+[d]
|
|
« 1 » |