73 / 73
May 2021

Funkcje itoa i strrev nie są w standardzie języka C (czyli część kompilatorów może je zawierać, a część nie). Dlatego otrzymujesz błąd kompilacji. Zamiast nich możesz użyć w pierwszym wypadku funkcji sprintf (wygoogluj sobie), w drugim musisz napisać własną funkcję.

15 days later

Dzięki za rady, napisałem własną funkcje odwracająca elementy, zamiast atoi i itoa uzylem sprintf i sscanf ale niestety nie pomoglo.
Ideone tez zwraca sukces https://ideone.com/cssAKc9
Prosze o jakas inna podpowiedz :wink: z góry dzieki!

Twój kod nie przechodzi dla testu:
2
10
11

Nie potrzebujesz też ifa który sprawdza czy ile_testow mieści sie w podanym zakresie. Zakres jest podany w treści zadania tylko po to aby dać pojecie o wielkości danych wejściowych i dobrać odpowiedni typ zmiennej. Pomijając tego ifa to usunięcie dokładnie jednej linijki z Twojego kodu pozwoliło otrzymać AC.

E tam, taki sukces. Tylko tyle, że się poprawnie kompiluje i dla pustego wejścia, nic nie zwraca. Może przetestój taki:

    int main(){
    }

i zobacz, czy [też] będzie sukces, czy nie? [na ideone]

9 months later

Witam

Wskazówka: funkcja palindrom powinna przed porównaniem dwóch połówek liczby obrócić kolejność znaków w jednej z połówek.

Poboczna uwaga: Nie znam się na python-ie, ale czy nie jest to dziwne, że x jest na zmianę int-em i str-ingiem.

Jeśli zmienię kolejność znaków tylko w jednej porównywanej połówce to nie spełnię warunków zadania.

Mając przykładowo liczbę x = 3456 najpierw tworze sobie jej odwrotność czyli 1542. Następnie sumuje dwie wartości i otrzymuje wynik 4998. Teraz sprawdzam czy pierwsze dwie cyfry są równe dwóm ostatnim a ty proponujesz mi odwrócenie kolejności znaków z 49 na 94 i porównanie tego z 98. Nie rozumiem dlaczego ;/

Właśnie o to chodzi. Zadanie polega na sprawdzaniu Czy liczba po zsumowaniu jest palindromem.
121 jest palindromem (treść zadania)
4884 jest palindromem (na marginesie jest to wynik zabawnych dodawań dla 69)
4848 nie jest palindromem

W sumie to nie musisz obracać połówki. Możesz też porównać po kolei znaki pierwszy z ostatnim, drugi z przedostatnim itd jeśli liczba jest dłuższa.

Już rozumiem, zadanie zaliczone.
Dziękuje bardzo za pomoc :slight_smile:

1 year later

Jedyne co widzę to w pętli while(CzyPalindorm(liczba)!= true) zmienna liczba może zyskiwać na długości (wielkości stringa), a liczbaOdwrocona nie (ciągle ma taką samą długość, przez co pewnie wychodzisz poza zakres po kilku iteracjach).

4 months later

Cześć,

jak moi przedmówcy, mam problem z uzyskaniem AC dla tytułowego zadania. Mój kod wygląda tak: https://ideone.com/SRa4c29 i jest napisany w C++.
Już trzeci dzień główkuję nad tym problemem i nie potrafię znaleźć błędu, dlatego proszę o pomoc :slight_smile:.

Dostaje takie same wyniki w moim programie który dostał AC.

EDIT:
w związku z postem @bieniek_k moja analiza jest niepotrzebna i myląca więc skasowałem.

Ja odkryłem że kod kolegi @elefesel nie działa tylko w c++ 4.3.2. W każdej wyższej wersji już dostanie AC, tylko jeszcze nie mogę odkryć skąd się bierze ten błąd
P.S
Po wielu próbach uzyskałem AC na 4.3.2. Zmieniłem tylko jedną rzecz.

ans = palinSum(number, &sumNum);
cout<<ans<<" "<<sumNum<<endl;

A dlaczego nie wiem :smiley: Może ktoś mądrzejszy będzie potrafił to wyjaśnić :smiley:

        cout<<palinSum(number, &sumNum)<<" "<<sumNum<<endl;

Pisząc taką linijkę zakładamy, że cout wykonuje operacje od lewej do prawej. Czyli najpierw wywołana zostanie metoda palinSum, a potem zostanie pobrana wartość z obliczonego już sumNum. A tak być nie musi.

Może się zdarzyć, że najpierw wypiszemy zero, a dopiero potem odpalimy funkcję palinSum.

Poprawka @bieniek_k zadziałała, bo najpierw obliczył wynik, a dopiero potem pobrał wartość.

Dziękuję Wam za pomoc, czasem błędy znajduje się w nieoczekiwanych miejscach. Mnie również zaskoczyło to znalezisko, najwidoczniej muszę przyjrzeć się dokładniej działaniu cout.
Jeszcze raz dziękuję za poświęcony mi czas :slight_smile:

Prawda. Ale morał-wnioski z całej tej dyskusji powinny być dla Ciebie co najmniej taki/takie:
A właściwie sam wyciągnij “je”. Na Ideone użyłeś C++14 (gcc 8.3). Na spoju użyłeś i nadal to robisz - gcc4.3.2, a u “siebie” jeżeli piszesz też na swoim sprzęcie pewnie jeszcze innej wersji kompilatora. Czy to dobrze? Z jednej strony dobrze napisany kod, powinien skompilować się na każdej wersji, czyli super - testujesz przenośność programu, ale jak widać czasami stwarza to problemy - dla tzw “topornie” napisanego kodu, jak powyżej.

A co tam takiego topornego? - a chociażby BEZMYŚLNE użycie zmiennych globalnych - nie żebym miał coś przeciw ich używaniu w malucienkich programikach na spoju, ale chociaż róbmy to z sensem. Inaczej wpadnie to nam w nałóg i będziemy to robić też w dużych, a to już może nie być takie wesołe.