Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] SPOJ Czarodziejskie lusterko

Ostatnio zmodyfikowano 2019-12-17 21:27
Autor Wiadomość
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:

C/C++
#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 :)
P-175798
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. » Porady dla użytkowników cpp0x.plZakładanie tematów na forum zalecenie
P-175800
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/types
unsigned 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 

P-175802
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ź :)
P-175812
« 1 »
  Strona 1 z 1