[C++] SPOJ Czarodziejskie lusterko
Ostatnio zmodyfikowano 2019-12-17 21:27
Biedrzyk Temat założony przez niniejszego użytkownika |
[C++] SPOJ Czarodziejskie lusterko » 2019-12-16 21:16:26 Witam, właśnie walczę z zadaniem ze SPOJ-a https://pl.spoj.com/problems/AL_05_01/ Poniżej podam kod: #include <iostream>
using namespace std;
string naBinarna( unsigned long long int liczba ) { string binar = ""; while( liczba > 0 ) { binar +=( char )( liczba % 2 + 48 ); liczba /= 2; } return binar; } int main() { unsigned long long int liczba; string binar; while( cin >> liczba ) { unsigned long long int liczba2 = 0; binar = naBinarna( liczba ); for( int j = 1, i = binar.length() - 1; i >= 0; --i, j *= 2 ) { liczba2 +=( int ) binar[ i ] % 48 * j; } cout << liczba2 << endl; } return 0; }
program działa praktycznie bez zarzutu do czasu kiedy sprawdzam liczbę 4294967297 powinienem dostać taką samą a tu dostaję 1 - ktoś może podpowiedzieć dlaczego? Pozdrawiam :) |
|
pekfos |
» 2019-12-16 22:29:32 Przekraczasz zakres j. Musiałem wejść link, żeby się dowiedzieć o co w ogóle chodzi. To wystarczający powód, by z miejsca skasować temat. Zakładanie tematów na forum |
|
darko202 |
» 2019-12-17 08:11:03 >> kiedy sprawdzam liczbę 4'294'967'297 powinienem dostać taką samą a tu dostaję 1 gdybyśmy użyli typu unsigned long int od 0 do 4'294'967'295 wynik wydawałby się zgodny z oczekiwaniem dlatego podejrzany jest użyty typ unsigned long long int od 0 do 18'446'744'073'709'551'615 na https://en.cppreference.com/w/cpp/language/typesunsigned long long int wprowadzony w (C++11) stąd (może błędnie) wnioskuję, że użyty kompilator nie obsługuje standardu C++11 sprawdź czy np. dla 4'294'967'300 zwróci 4 |
|
Biedrzyk Temat założony przez niniejszego użytkownika |
» 2019-12-17 21:27:08 Pekfos - faktycznie, nie doczytałem jak tworzyć nowy temat za co przepraszam. I dziękuję za podpowiedź - wogóle o tym nie pomyślałem ;) zmieniłem j na long long int i śmiga aż miło :)i dostałem AC :) darko 202 - dzięki za podpowiedź :) |
|
« 1 » |