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

ASTA E RASPUNSUL LA LECTIA INVERS PRIM PEWELLCODE ,
#include
using namespace std;

int main() {
int a, x, o, prim1, prim2, d;
cin >> a;
x = a;
o = x % 10;
x = x / 10;
while(x != 0) {
o = o * 10 + x % 10;
x /= 10;
}
prim1 = 1;
prim2 = 1;
d = 2;
while(d <= a / 2) {
if(a % d == 0) {
prim1 = 0;
}
d++;
}
d = 2;
while(d <= a / 2) {
if(o % d == 0) {
prim2 = 0;
}
d++;
}
if(a == 1) {
prim1 = 0;
}
if(prim1 == 1 && prim2 == 1) {
cout << "DA";
} else {
cout << "NU";
}
return 0;
}

NU INTELEG CE E CU x=a copia lui a este x dar , nu intele ce e cu oglinditul o = x%10 si x=x/10
PROBLEMA ARE ENUNTUL URMATOR:
Invers Prim 2539
Dându-se un număr natural a, să se verifice dacă a și inversul (oglinditul) lui a sunt ambele numere prime.

Date de intrare
Se citește de la tastatură numărul natural a.

Date de ieșire
Să se afișeze DA dacă numărul a și inversul său sunt ambele prime sau NU, în caz contrar.

Restricții și precizări
1 ≤ a < 300 000
a nu are ultima cifră 0

MULTUMESC !

Răspunsuri la întrebare

Răspuns de simulink
1

Răspuns:

Ca sa construiesti oglinditul unui numar, va trebui sa iei cifrele de la sfarsitul numarului spre inceput. Pentru asta te folosesti de 2 operatii:

       x%10 este ultima cifra a numarului x;

       x/10 "taie" ultima cifra din numarul x;

Cum se procedeaza:

-  iei ultima cifra din numar (x%10) si o adaugi oglinditului (ca sa o adaugi la sfarsit inmultesti oglinditul cu 10 si aduni ultima cifra a nr x: o=o*10+x%10)

-"tai" ultima cifra din numar si ramai

Repeti cei doi pasi de mai sus cat timp numarul mai are cifre, adica (x!=0)

La sfarsitul algoritmului, numarul va fi 0, deci daca mai ai nevoie de el, trebuie sa ii retii valoarea(de-aia a facut x=a; ca sa  retina valoarea nr a nemodificata)

In algoritmul tau se porneste cu oglinditul luand valoarea ultimei cifre a lui x (o=x%10) si "taie" aceasta cifra din nr (x=x/10), apoi repeta cei doi pasi de care ziceam mai sus cat timp x!=0

o=x%10 si x=x/10 puteau sa fie inglobate in while-ul ala, astfel:

x=a; o=0; //initial oglinditul nu are nicio cifra si ii dau valoarea 0.

while (x!=0)

{o=o*10+x%10;

x=x/10;}

Explicație:


mvrabie128: MULTUMESC MULT!
Alte întrebări interesante