Czy dana liczba jest palindromem

0

Cześć. Czy ktoś potrafi mi wyjaśnić dlaczego ten kod:

#include <iostream>

using namespace std;

bool checkPalin(int number){
 int n, rev, digit;
 n = number;
 do{
    digit = n % 10;
    rev = (rev*10) + digit;
    n = n / 10;
 }while (n != 0);
 return rev != number;
}

int main()
{
    int t;
    cin >> t;
    for(int i=0; i<t; i++){
        int palin;
        cin >> palin;
        do{
           palin++;
           cout << palin << endl;
        }while(checkPalin(palin));
        cout << palin << endl;
    }
    return 0;
}

Działa zgodnie z oczekiwaniami. Ale jak z pętli do...while usunę cout to już nie działa, tak jak by się zapętlił.

#include <iostream>

using namespace std;

bool checkPalin(int number){
int n, rev, digit;
n = number;
do{
   digit = n % 10;
   rev = (rev*10) + digit;
   n = n / 10;
}while (n != 0);
return rev != number;
}

int main()
{
   int t;
   cin >> t;
   for(int i=0; i<t; i++){
       int palin;
       cin >> palin;
       do{
          palin++;
          //cout << palin << endl;
       }while(checkPalin(palin));
       cout << palin << endl;
   }
   return 0;
}

0

A jakie są oczekiwania, że jeden działa zgodnie z nimi, a drugi nie?

0

W pętli do...while inkrementuje liczbę (zmienną "palin") a następnie sprawdzam czy jest palindromem, czyli czytana od prawej do lewej jest taka sama jak czytana od lewej do prawej. Jeżeli jest wypisuje ją w konsoli . Takie są oczekiwania. Pierwszy kod działa poprawnie, tzn. dla liczby 808. wypisuje kolejno 809, 810 itd. aż do 818 (ta liczba jest palindromem). Drugi zachowuje się jak by się zapętlił, czyli dla liczby 808 nie dostaję nic (oprócz głośniejszej pracy wiatraka w komputerze xD).

1 użytkowników online, w tym zalogowanych: 0, gości: 1