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

Palindrom - niewidzialny dla mnie błąd

0 głosów
510 wizyt
pytanie zadane 17 listopada 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)
przywrócone 17 listopada 2018 przez Shimeo7

Cześć zrobiłem program, aby sprawdzał, czy dana liczba jest palindromem, jeśli nie to ma dodawać do siebie wyrazy i sprawdzić czy ta suma jest palindromem itd, niestety nie działa, a nie za bardzo wiem gdzie ;/ Czy ktoś mi podpowie, gdzie zwrócić uwagę, albo gdzie daje ciała?

#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>

using namespace std;

string liczba, odwrocona_liczba;
int dlugosc, odw_liczba,n_liczba, ile, proba=0;
int l_iczba;

int main()
{
    cin >> liczba; // string
    dlugosc=liczba.length();

    for(int i=dlugosc-1; i>=0; i--)
    {
        odwrocona_liczba+=liczba[i];
    }

    n_liczba=atoi(liczba.c_str()); //liczba do inta
    odw_liczba=atoi(odwrocona_liczba.c_str()); //odwrocona liczba do inta

    if(n_liczba==odw_liczba)
    {
        cout << n_liczba << " " << proba << endl;
    }

    else
    {
        do
        {
            proba++;
            l_iczba=n_liczba+odw_liczba; //ustala nowa liczbe

            ostringstream ss;
            ss << l_iczba;
            string liczba = ss.str(); //konwersja na string

            dlugosc=liczba.length();

            for(int i=dlugosc-1; i>=0; i--)
            {
                odwrocona_liczba+=liczba[i];
            }

            n_liczba=atoi(liczba.c_str());
            odw_liczba=atoi(odwrocona_liczba.c_str());
        }
        while(n_liczba!=odw_liczba);

        cout << n_liczba << " " << proba << endl;
    }
    return 0;
}

 

 

1 odpowiedź

0 głosów
odpowiedź 17 listopada 2018 przez jankustosz1 Nałogowiec (37,030 p.)

Jak chcesz sprawdzić czy dany string jest palindromem to wystarczy jedna pętla:

bool sprawdzPalindrom(string s)
{
for(int i = 0; i<s.size()/2; i++)
{
    if(s[i] != s[s.size()-1-i])
        return false;
}
return true;
}  

A błąd masz w 45 linijce gdzie do odwróconej liczby która zawiera już jakąś wartość dopisujesz kolejne elementy.

komentarz 17 listopada 2018 przez Shimeo7 Obywatel (1,910 p.)
Ok, dziękuję za odpowiedź. Mam pytanie, jak usunąć tą wartość, żeby nie dopisywać, a wpisywać nową?
komentarz 17 listopada 2018 przez jankustosz1 Nałogowiec (37,030 p.)
możesz po prostu ustawić tego stringa na pustą wartość czyli odwrocona_liczba = "";

albo możesz użyć funkcji clear (chyba taka jest) odwrocona_liczba.clear();
komentarz 17 listopada 2018 przez niezalogowany
zmienna = "";

Podobne pytania

0 głosów
2 odpowiedzi 693 wizyt
pytanie zadane 19 stycznia 2020 w C i C++ przez Piotrek1122 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 629 wizyt
pytanie zadane 24 października 2019 w C i C++ przez MagdaS Nowicjusz (140 p.)
0 głosów
3 odpowiedzi 917 wizyt
pytanie zadane 17 listopada 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

93,604 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,093 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

Kursy INF.02 i INF.03
...