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

Cerinţa
Se dă un șir cu n numere naturale. Determinați suma celor care au oglinditul număr prim.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale.
Date de ieşire
Programul afișează pe ecran numărul S, reprezentând rezultatul cerut.
Restricţii şi precizări
1 ≤ n ≤ 1000 cele n numere citite vor fi mai mici decât 1.000.000.000
Exemplu Intrare
6 133 35 41 31 90 7
Ieșire 206
Explicație
Dintre cele 6 numere citite au oglinditul număr prim: 133 35 31 7. Suma lor este 206.


Daca poate cineva va rog mult cu structura cât timp, DAU COROANĂ ​

Răspunsuri la întrebare

Răspuns de Apollyon
0

Răspuns:

#include <iostream>

using std::cout, std::cin, std::endl;

// Funcția returnează oglinditul numărului

static int creeazaOglindit(int numar) {

 int oglinditulNumarului{}, ultimaCifra;

 // cât timp numărul este diferit de 0

 while (numar) {

   // luăm ultima cifră a numărului

   ultimaCifra = numar % 10;

   // și o adăugăm la oglindit

   oglinditulNumarului = oglinditulNumarului * 10 + ultimaCifra;

   numar /= 10; // împărțim numărul la 10 ca while-ul să nu ruleze la infinit

 }

 return oglinditulNumarului;  // la final returnăm oglinditul creat

}

// Funcția returnează true dacă numărul este prim, false altfel

static bool estePrim(const int& numar) {

 // 0 și 1 nu sunt prime

 if (numar == 0 || numar == 1) return false;

 // dacă numărul se împarte la altceva înafară de 1 și el însuși înseamnă că nu e prim

 for (int i = 2; i <= numar / 2; ++i)

   if (numar % i == 0) return false;

 // altfel înseamnă că e prim

 return true;

}

int main() {

 int n, *numere, sumaNrPrime{}, nrOglindit;

 cout << "Introdu n (de ex. 5) >> ";

 cin >> n;

 // Creăm vectorul de dimensiune N

 numere = new int[static_cast<size_t>(n)];

// Citim numerele-n vector

 for (int i = 0; i < n; i++) {

   cout << "numere[" << i << "] >> ";

   cin >> numere[i];

 }

 // Parcurgem vectorul și dacă oglinditul numărului este prim adăugăm numărul la sumă

 for (int i = 0; i < n; ++i) {

   nrOglindit = creeazaOglindit(numere[i]);

   if (estePrim(nrOglindit)) sumaNrPrime += numere[i];

 }

 // Afișăm suma numerelor ce au oglinditul prim

 cout << "Suma numerelor prime oglindite este >> " << sumaNrPrime << endl;

 // La final eliberăm memoria

 delete[] numere;

 return 0;

}

Alte întrebări interesante