Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Oglinditul recursiv al unui număr în C++

Dându-se un număr natural n, să se determine, folosind un subprogram recursiv, oglinditul său.

Exemplu. Pentru n = 1239, oglinditul este 9321.

Pentru varianta nerecursivă, puteți să urmăriți acest articol.

Cum se calculează răsturnatul (oglinditul) unui număr natural

Forma nerecursivă calcula astfel oglinditul unui număr: cream o variabilă în care să ținem răspunsul și, pe rând, luam cifrele numărului de la coadă și le adăugam în răspuns. La final, în variabila de răspuns aveam oglinditul nostru. Iată o vizualizare a acestui algoritm:

Variabilă Valoare
n 03344993311
oglindit 139430

Vom proceda similar în varianta recursivă. Avem o funcție cu doi parametri, n și raspuns (care este inițial 0). Distingem cazurile:

  • Dacă n mai are cifre, atunci la raspuns se adaugă ultima cifră a lui n și se apelează funcția cu n / 10 (n fără ultima cifră) și noul raspuns;
  • Dacă n nu mai are cifre, se returnează raspuns.

Implementare în C++

Iată codul, conform observațiilor de mai devreme:

#include <iostream>

using namespace std;

int oglindit(int n, int raspuns) {
    if(n > 0) { //Dacă *n* mai are cifre
        int cifra = n % 10; //Luăm ultima cifră a lui *n*
        raspuns = raspuns * 10 + cifra; //Adăugăm ultima cifră a lui *n* la *raspuns*
        n = n / 10; //Tăiem ultima cifră din *n*
        return oglindit(n, raspuns); //Apelăm din nou funcția, cu valorile actualizate ale lui *n* și *raspuuns*
    } else { //Dacă *n* nu mai are cifre
        return raspuns; //Returnăm răspunsul
    }
}

int main()
{
    //Declarăm și citim *n*, numărul dat
    int n;
    cin >> n;

    //Afișăm oglinditul, folosindu-ne de o funcție recursivă
    cout << oglindit(n, 0); //*raspuns* trebuie să fie inițial 0
}

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Instrucțiunea continue (structuri repetitive)Află secolul unui an citit de la tastatură în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleNumărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Verificare dacă șir de caractere este palindrom în C++Al N-lea termen dintr-o progresie geometricăMaximul și minimul a n valori în C++Verifică dacă un număr aparține șirului Fibonacci în C++Verifică dacă o literă este vocală în C++Citește un șir de caractere cu spații în C++Cel mai mic număr cu suma cifrelor N în C++Aria și circumferința unui cerc în C++Calculul combinărilor de n luate câte k (nCk) în C++Maximul și minimul unui vector în C++Mediana unui șir de valori în C++Vectorii în C++: declarare și parcurgereCombinatorică în C++: permutări, aranjamente, combinări și altelePrima cifră a unui număr în C++Valoarea absolută (modulul) unui număr în C++Transformarea unui număr din baza 10 în baza 2 în C++Instrucțiunea do while (structuri repetitive)Verificare număr prim în C++ (Clasa a IX-a)Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăSuma divizorilor unui număr în C++Citirea și afișarea matricelor în C++Cifra maximă și minimă a unui număr în C++Transformarea unei litere mari în literă mică în C++Verificare dacă un număr este palindrom în C++De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Numărul aranjamentelor în C++ (formula aranjamentelor)Do while vs while în C++ - Care e diferența?Cel mai semnificativ bit în C++Interschimbarea a două variabile în C++ (3 metode)Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorCe înseamnă variabilă globală și locală în C++?Instrucțiunea de decizie în C++: if, else, switch, caseCifra maximă a unui număr recursiv în C++Ciurul lui Eratostene în C++Oglinditul unui număr în C++Numărul de divizori al unui număr în C++Afișarea divizorilor primi ai unui număr în C++Căutare binară în C++Structuri repetitive (while, do while, for, etc)Interclasarea a doi vectori în C++Suma numerelor naturale dintr-un interval dat în C++Vectorii în C++: citire și afișareCel mai frecvent element dintr-un șir în C++Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Instrucțiunea for (structuri repetitive)Câte numere naturale sunt într-un interval dat? (C++)Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Inversarea unui vector în C++Pointer în C++. Variabile de tipul char * (char steluță)Cum să afișezi partea întreagă a unui număr real în C++Instrucțiunea break (structuri repetitive)Operații cu numere mari în C++ - Toate funcțiile explicateTipuri de date în C++: numere întregi, reale, caractere și alteleVerifică dacă trei puncte sunt coliniare C++Numărul de divizori primi ai unui număr în C++Funcții în C++. Ce sunt subprogrameleVerifică dacă un caracter este cifră în C++Suma 1 + 2 + 3 + ... + N în C++Vectori de frecvență (de apariții) în C++Aria unui triunghi folosind coordonatele acestora în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Bordarea unei matrice în C++Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicMaximul și minimul a două valori în C++Numărul de apariții al unui număr într-un vector în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortOglinditul recursiv al unui număr în C++Materia pentru olimpiada de informatică - tot ce trebuie să știiVerifică dacă un număr dat este o putere de 2 în C++Copiuțe: Cifrele unui numărVerifică dacă o literă este mică sau mare în C++Numărul combinărilor în C++ (formula combinărilor)Cel mai puțin semnificativ bit în C++Comentarii în C++Generarea șirului Fibonacci generalizat în C++Ce este o funcție void în C++?Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Maximul și minimul a trei valori în C++CMMMC a două numere în C++ (cel mai mic multiplu comun)Indicatorul lui Euler în C++Radicalul unui număr în C++ (rădăcina pătrată)Ce este o variabilă unsigned în C++?Distanța dintre două puncte în C++Al N-lea termen dintr-o progresie aritmeticăCe înseamnă endl în C++?Verifică dacă un număr este par sau impar fără modulo în C++CMMDC recursiv a două numere naturale în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Rădăcina cubică a unui număr în C++ (cube root)Matrice pătratice în C++. Diagonala principală și secundarăCum să calculezi instant 2 la puterea N în C++Instrucțiunea while (structuri repetitive)Funcții predefinite în C++ (matematice, șiruri de caractere)Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Cel mai mare divizor comun (CMMDC) a două numere în C++Șiruri de caractere în C++. Tot ce trebuie să știiComplexitatea unui algoritm (timp și spațiu) în C++Numărul de cifre ale factorialului unui numărVerificarea unui an bisect în C++Cum să citești și să afișezi în fișiere în C++Cifra de control a unui numărDivide et Impera (metodă de programare C++)Cea mai lungă secvență de elemente crescătoare în C++Verifică dacă un caracter este literă în C++Tipul struct în C++. Ce sunt structurile de date neomogeneNumărul minim de peroane pentru o gară în C++Afișarea elementelor unui vector recursiv în C++Inversarea unui șir de caractere în C++Transformarea unui număr din baza 2 în baza 10 în C++Transformarea unei litere mici în literă mare în C++Codul ASCII (tabel complet)Factorialul unui număr în C++Al N-lea termen Fibonacci în C++Numere triunghiulare. Verificarea unui număr triunghiularRecursivitate în C++Numărul permutărilor în C++ (formula permutărilor)Șirul lui Fibonacci în C++Suma elementelor unui vector recursiv în C++Aflarea sumei primelor N sume Gauss

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont