Numerele din intervalul [n,m] care sunt palindrom

Vreau sa calculez toate numerele care sunt palindrom din intervalul [n,m]
Ce ar trebui sa faca algoritmul:parcurge fiecare numar de la n la m si ii calculeaza oglinditul iar la final testeaza daca este palindrom.
Nu inteleg de ce dar se blocheaza undeva.

int n,m;
  int numar,copie;
  int oglindit,c;
  cin>>n>>m;
  for(numar=n;numar<=m;numar++) {
   oglindit=0;
   copie=numar;
   while(numar != 0) {
       c=numar%10;
       oglindit=oglindit * 10 + c;
       numar=numar/10;
   }
   if(copie == oglindit)
       cout<<copie<<" este oglindit"<<endl;

  }

https://www.programiz.com/cpp-programming/examples/armstrong-number-interval

Daca vrei o strategie eficienta genereaza-le in loc sa le testezi.

E mai greu, dar conteaza mult.

Eu m-as duce printre numere si as adauga numere din stanga si din dreapta pana cand ajungem la un numar mai mare de m. E nevoie de cate un caz pentru numere cu lungime para si lungime impara.

2 Likes

poti sa scrii bucata de cod care verifica daca un nr este palindrom intr-o functie.
int palindrom(int nr) { aici scrii bucata de cod pt palindrom }

apoi in main-ul programului poti sa apelezi acea functie

main()
{
    int m, n, i;
    cout<<"m="; cin>>m;
    cout<<"n="; cin>>n;
    for(i=m;i<n;i++)
    if (palindrom(i)) cout<<i<<endl;
    return 0;
} 

http://www.cnchogastecuci.ro/portofoliu/solutii/pb54.html

aici am impresia ca aici este eroarea

posibil,dar aici resetam oglinditul(ca sa nu se amestece cu cel de la numarul urmator/anterior) si faceam o copie a numarului(deoarece cand ii aflam cifrele la final devenea 0)

#include <iostream>

using namespace std;

int main() {
    int n, m;
    int numar;
    int oglindit, c;

    cout << "n=";
    cin >> n;
    cout << "m = ";
    cin >> m;

    for (int i = n; i <= m; i++) {
        oglindit=0;
        numar = i;

        while (numar != 0) {
            c = numar % 10;
            oglindit = oglindit * 10 + c;
            numar = numar / 10;
        }


        if (i == oglindit) {
            cout << i << " este oglindit" << endl;
        }
    }
}

Problema cu loop-ul infinit aparea din cauza ca modificai variabila “numar” dar in acelasi timp o foloseai intr-un for.

2 Likes

Răspunsul ar trebui marcat ca si soluție !

Indentarea din linkul ăla este atroce. Mereu am avut boala pe manualele de informatică, resursele etc de la noi care nu au și ele o indentarea și spațiere frumoasa. Înțeleg că e scumpă hârtia, dar totuși …

1 Like

Aici sunt de acord. Link-ul postat de mine era informativ :slight_smile:

La orele de informatica nu se vorbește despre coding style(probabil unii profesori vorbesc)