se da un numar natural. sa se modifice cifra impara prin scaderea cu 1 formand alt numar
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int main()
{
unsigned int n, numar;
cin>>n;
while ( n != 0 )
{
if( (n % 10) % 2 == 0 )
numar = numar * 10 + n % 10;
else
numar = numar * 10 + ( ( n % 10 ) - 1 );
n = n / 10;
}
int oglindit = numar;
numar = 0;
while ( oglindit != 0 )
{
numar = numar * 10 + oglindit % 10;
oglindit = oglindit / 10;
}
cout << numar;
}
Explicație:
Citesti un numar n. Verifici fiecare cifra a numarului daca este para sau nu timp in care creezi un alt numar respectand scaderea cu 1 a cifrei impare.
Astfel că dacă citești n=2345
Dupa primul while, variabila număr va avea valoarea: 4422 deoarece parcurgerea cifrelor se face de la dreapta numărului spre stânga.
In al doilea while facem opusul primului while. Adica oglinditul ( ceea ce inseamna ca vom crea un alt numar, cel corect, fiind opusul numarului rezultat in primul while )
in primul while numar=4422
Cream o copie numita oglindit care primeste numarul 4422
Folosind algoritmul de oglindire ( care e acelasi lucru dpdv al sintaxei cu cel de cifre ) vom determina numarul corect pentru a-l afisa.
Deci..
dupa al doilea while variabila numar va memora numarul 2244, pe care il vom afisa.
Pentru a intelege recomand sa faci pe foaie codul de mai sus.
Iata cateva exemple:
n=12345
se va afisa 2244
Explicatie: Daca scazi cu 1 numere impare vei avea 02244. Un numar care incepe cu cifra 0 nu se mai scrie cu 0. Adica numarul 02244 se va scrie 2244
n=10139
se va afisa 28 ( acelasi principiu ca cel anterior )
n= 248
se va afisa 248.