Informatică, întrebare adresată de Utilizator anonim, 8 ani în urmă

Salut, chiar nu stiu cum ar trb sa procedez

Cerinta :

Se dă un număr natural N. A doua cifră trebuie interschimbată cu penultima.

Date de intrare :

Se citește un singur număr natural, N.

Date de iesire :

Se afișează numărul N.

Restrictii:

N > 9

!!! Doar cu ------- IF ------si ------ WHILE ------ !!!

Am reusit doar sa fac store la penultima si a2a cifra :

int n, a = 0, b = 0, demn = 0;

if (n > 9) {
while (n) {
demn++;
if (demn == 2) {
a = n % 10;
}
if (n > 10) {
b = n % 10;
}
n /= 10;
}
}


boiustef: nu știu câte știi ... Dacă ai cunoaște vectorii, ai pune cifrele numărului în vector de cifre, apoi faci interschimbarea cerută...
boiustef: dar se poate și fără vector...
Utilizator anonim: Rezolvarea trebuie doar cu IF si/sau WHILE exact cum am mentionat m-ai sus. Nu am idee cum as putea doar cu if si while...
boiustef: uite pun o rezolvare...
c10crys: Buna Alex,ai rezolvat aceasta problema?ms

Răspunsuri la întrebare

Răspuns de boiustef
2

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int n;

   cin >> n;

   int m=n, p10=1, c1, c2;

   while (m>9) {

       p10*=10;

       m/=10

   }

   if (n<1000) {

       cout << n;

   }

   else {

       m=n;

       c2=m%100/10;

       c1=(m/(p10/10))%10;

       int aux;

       aux=m/p10*p10;

       p10/=10;

       aux=aux+c2*p10;

       aux=aux+m%p10;

       aux=aux/100*100+c1*10+m%10;

       cout << aux;

   }

   return 0;

}

Explicație:

aflu p10, adică puterile lui 10. de exemplu pentru n=23125, p10=10000.

Asta se face pentru a parcurge cifrele de la stânga la dreapta pentru a afla

a doua cifră.

Apoi urmează niște artificii cu div și mod pentru a forma numărul căutat...

Succese la cercetare...

apropo... c1 e a doua cifră, iar c2 este penultima...


boiustef: întrebări?
boiustef: da, se poate if ( n < 1000)
deoarece pt n < 1000 numarul ramane nemodificat...
boiustef: întrebări, nu-s, eu am plecat. O zi senină!
Utilizator anonim: aux = m/p10*p10 // ex; 123456
Utilizator anonim: nu inteleg ce ar trb sa devina aux acolo, adica m =123456 / 100000 * 100000
Utilizator anonim: nu cont, multumesc mult
boiustef: aux = m/p10*p10 pt m=2356 devine aux=2000
Deci de aic se începe crearea numărului căutat... deoarece m/p10 ne dă prima cifră
Utilizator anonim: am realizat la 5 min dupa ce am intrebat :)). totusi cred ca este un amanunt care l-am scapat. In problema se cere afisarea: "Se afișează numărul N, după ce este demn de această operație."
Utilizator anonim: acesta este enuntul din carte " Se dă un număr natural N. Pentru a fi demn de afișat, a doua cifră trebuie interschimbată cu penultima."
Utilizator anonim: am adaugat un if (aux >= 1000){ cout << aux; } return 0; doar ca nu asta pare sa fie solutia pentru 100p
Alte întrebări interesante