• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w programie liczącym palindomy

Object Storage Arubacloud
0 głosów
759 wizyt
pytanie zadane 20 czerwca 2018 w C i C++ przez ksareks Nowicjusz (140 p.)
edycja 20 czerwca 2018 przez criss

Cześć , mam problem z zadaniem:
Piotruś w klasie na lekcji matematyki bardzo się nudził i pani postanowiła dać mu dodatkowe zadanie do rozwiązania. Piotruś otrzymał kartkę, na której napisane były małe liczby. Piotruś ma za zadanie stwierdzić, czy dana liczba jest palindromem (tzn. czy czyta się ją tak samo od lewej do prawej strony, jak od prawej do lewej). Jeżeli nie, Piotruś powinien dodać do siebie wartość liczby czytanej od lewej do prawej oraz wartość liczby czytanej od prawej do lewej, sprawdzić, czy suma jest palindromem, i jeżeli nie -- kontynuować proces, aż otrzyma palindrom.

Przykładowo, mając daną liczbę 28, Piotruś stwierdzi, że nie jest ona palindromem i wykona dodawanie 28 + 82 = 110. Liczba 110 wciąż nie jest palindromem, zatem Piotruś wykona jeszcze dodawanie 110 + 011 = 110 + 11 = 121. Wynik tego dodawania jest już palindromem, więc obliczenia zostaną zakończone.

Twoim zadaniem jest napisać program, który dla każdej liczby rozważanej przez Piotrusia wypisze palindrom (wynik obliczeń Piotrusia), oraz liczbę dodawań prowadzących do wyniku.

Czemu nie działa kod:
 

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int proces=0;
int a;
cin>>a;
while(true)
{
int dlugosc;
string napis= to_string(a);
dlugosc=napis.length();
int parametr;
parametr=dlugosc;
int x;
x=parametr/2;
for(int n=0;n<x;n++)
{
if(napis[n]==napis[parametr-n-1])
{
dlugosc=dlugosc-2;
}
else break;
}
                    
                    if(dlugosc<=1)
                    {
                        cout<<a<<"   "<<proces<<endl;
                        break;
                    }
                    if(dlugosc >=2)
                {
                string napis1;
                for(int d=0;d<parametr;d++)
                {
                napis1[d]=napis[parametr-1-d];
                }

                int nowa;
                nowa = atoi(napis1.c_str());
                a = a+nowa;
                proces++;
                }
        }
    }
return 0;
}


Dziękuje za każdą pomoc !

1 odpowiedź

0 głosów
odpowiedź 20 czerwca 2018 przez profesorek96 Szeryf (91,420 p.)

Nie chcało mi sie poprawiać twojego kodu. Proszę tutaj masz czytelnie napisany kod. Popracuj nad rozbijaniem programu na funkcję.

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

int odw(int n)
{
    int k=0;
    while(n>0)
    {
        k+=n%10;
        n/=10;
        k*=10;
    }
    return k/10;
}
bool czy_Pal(int n)
{
    int k=odw(n);
    if(k==n)return true;
    else return false;
}
int main()
{
    int n;
    cin>>n;
    int i=1;
    while(true)
    {
        if(czy_Pal(n)==true)
        {
            cout<<n<<" :"<<i;
            break;
        }
        else
        {
            n+=odw(n);
            i++;
        }
    }
    return 0;
}

 

komentarz 21 czerwca 2018 przez niezalogowany

Funkcję czy_Pal można tak:

bool czy_Pal(int n)
{
    return n == odw(n);
}

Pętla trochę przekombinowana:

int i = 0;
while (!czy_Pal(n))
{
	n += odw(n);
	i++;
}
cout << n << " " << i << "\n";
komentarz 21 czerwca 2018 przez profesorek96 Szeryf (91,420 p.)
Słuszna uwaga :)

Zgadzam się z tobą.
1
komentarz 21 czerwca 2018 przez mokrowski Mędrzec (155,460 p.)

Trzy uwagi:

1. Zabrakło liter w ASCII by nazywać funkcje?

Proszę tutaj masz czytelnie napisany kod...

Z całą pewnością nie będzie szybciej działało ani nie będzie bardziej czytelne jeśli nazwa będzie 1 literowa. Czy zmiennej czy funkcji.

2. Spróbuj policzyć palindrom dla 196. (*)

3. Czy palindromem 10 jest 01 czyli 1?

 

(*) Dlaczego tak jest warto sprawdzić w internecie.. 

Podobne pytania

0 głosów
1 odpowiedź 306 wizyt
pytanie zadane 2 grudnia 2020 w C i C++ przez brzydki2 Początkujący (300 p.)
0 głosów
1 odpowiedź 241 wizyt
pytanie zadane 17 listopada 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)
+1 głos
1 odpowiedź 285 wizyt
pytanie zadane 26 czerwca 2023 w C i C++ przez Szyszka Gaduła (3,490 p.)

92,575 zapytań

141,424 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...