Să se afişeze toate numerele reprezentate în baza k, mai mici decât n, care sunt palindrom în baza 10. n şi k se introduc de la tastatură k=[2, 9]. 16
#include <iostream>
int main() {
int n, k;
std::cout << „Introduceti n: „;
std::cin >> n;
std::cout << „Introduceti k: „;
std::cin >> k;
for (int i = 0; i < n; i++) {
// Transformam numarul i din baza k in baza 10
int base = 1;
int result = 0;
int temp = i;
while (temp > 0) {
result += (temp % 10) * base;
temp /= 10;
base *= k;
}
// Verificam daca numarul este palindrom in baza 10
int copy = result;
int reverse = 0;
while (copy > 0) {
reverse = reverse * 10 + (copy % 10);
copy /= 10;
}
if (result == reverse) {
std::cout << i << ” „;
}
}
return 0;
}
Pentru a verifica dacă un număr reprezentat în baza k este palindrom, putem transforma numărul în baza 10 și apoi folosim același algoritm.
Pentru a transforma un număr din baza k în baza 10, putem folosi următorul algoritm:
- Inițializăm o variabilă base cu 1 și o variabilă result cu 0.
- Parcurgem cifrele numărului, începând cu cifra cea mai semnificativă:
- Adunăm la result produsul dintre cifra curentă și base.
- Înmulțim base cu k.
- La final, valoarea lui result este reprezentarea numărului în baza 10.
În continuare, vom combina cele două algoritme pentru a rezolva problema.
Observați că folosim variabila temp
pentru a păstra copia numărului original, astfel încât să nu îl distrugem în timpul transformării din baza k în baza 10.