Informatică, întrebare adresată de ciprian74, 8 ani în urmă

Pentru un număr dat x, considerăm următoarele noțiuni:

oglinditul lui x reprezintă numărul scris cu cifrele lui x în ordine inversă;
urma lui x reprezintă diferența dintre numărul format cu atâtea cifre de 9 câte cifre are x și numărul x;
numărul x este curat dacă oglinditul său este egal cu urma sa. De exemplu, 27 este un număr curat.
Cerința
Se dau cel mult 1000 numere naturale mai mici decât 100.000.000. Să se stabilească despre fiecare număr dacă este sau nu curat.

Date de intrare
Fișierul de intrare nrcurat.in conține pe prima linie cel mult 1000 numere naturale mai mici decât 100.000.000, separate prin spații.

Date de ieșire
Fișierul de ieșire nrcurat.out va conține pe prima linie pentru fiecare număr x din fișierul de intrare valoarea 1 dacă x este curat sau 0 în caz contrar. Valorile sunt separate prin câte un spațiu.

Restricții și precizări
în fișier sunt cel mult 1000 de numere naturale mai mici decât 100.000.000



Exemplu
nrcurat.in

345 18 53 986310 467 1638
nrcurat.out

0 1 0 1 0 1
Explicație
Numerele 18, 986310 și 1638 sunt numere curate.

Salut! Va rog mult sa ma ajutati la aceasta problema. Doresc rezolvare in C++ si cu explicatii la cod. Este problema #3303 de pe pbinfo. Am incercat sa o fac dar nu imi iese.

Răspunsuri la întrebare

Răspuns de andreidamian604
1

Răspuns:

#include <fstream>

using namespace std;

ifstream cin("nrcurat.in");

ofstream cout("nrcurat.out");

int main()

{

   int n;

   while ( cin >> n ) // cat timp se citesc numere

   {

       int ogl = 0; // oglindit

       int aux = n; // auxiliar

       int nrc = 0; // nr cifre

       int nn = 9;

       int cnt = 1;

       

     // am declarat asa ca sa se vada mai usor

       while ( aux )

       {

           int c = aux % 10;

           ogl = ogl * 10 + c;  // algoritmul pentru oglindit

           nrc++; // cat timp aux != 0 nrc = nrc + 1, rezultand astfel numarul de cifre

           aux = aux / 10;

       }

       while ( cnt < nrc )

       {

           nn = nn * 10 + 9;

           cnt++;

       }

       if ( ogl == nn - n )

           cout << 1 << ' ';

       else

           cout << 0 << ' ';

   }

   return 0;

}

while ( cnt < nrc )

{

      nn = nn * 10 + 9;

      cnt++;

 }

aici se creeaza un numar care are atatea cifre de 9 cate cifre are n

- nn e initial 9

de ce? daca n ar avea o cifra nn ar avea o singura cifra, adica 9

ex, numarul 18: -> 2 cifre

cat timp 1 < 2

- 9 = 9 * 10 + 9, adica 99

cnt devine 2 si se opreste

la final, zic pe exemplu

n = 18;

ogl = 81

daca 81 = 99 - 18

    cout << 1 << ' ';

atentie, folosim o variabila ajutatoare aux pentru ca avem nevoie de n mai tarziu

daca structura este

while ( n )

       {

           int c = n % 10;

           ogl = ogl * 10 + c;  

           nrc++;

            n = n / 10;

       }

la sfarsitul ei n devine 0


ciprian74: Multumesc!
ciprian74: o intrebare
ciprian74: ce inseamna nn
andreidamian604: nn e numărul ăla format din cifre de 9 cate cifre are n. daca n este 123 nn e 999
Alte întrebări interesante