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;
}
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.
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.
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 …