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

Se citeşte de la tastatură un şir de n numere. Realizaţi un program care verifică dacă numărul format din cifrele unităţilor acestora este un număr prim. Exemplu: Pentru n=4 şi numerele 237 23 453 11 se va afişa: Numărul 7331 este prim.

CE AM GRESIT ??


#include

using namespace std;

int main()
{
int n,i,nr,u,nou,is_prime=1,d;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>nr;
do
{
u=nr%10;
nou=nou*10+u;
nr/=10;
}while(nr);
is_prime=1;
if(nou<2 || nou>2 && nou%2==0)
is_prime=0;
else
for(d=3;d*d<=nou;d+=2)
if(nou%d==0)
{
is_prime=0;
break;
}
if(is_prime=1)
cout<<"Numarul "< else
cout<<"Numarul nu este prim";
}
return 0;
}


boiustef: formezi din unităţi numărul oglindit celui aşteptat, şi pe nou tr. să-l iniţialiteti cu 0.
CinevaFaraNume: Algoritmul tau verifica daca inversul fiecarui numar este prim.
Trollea: si cum fac sa nu mai fie inversul ??
boiustef: u=nr%10;
nou=u*10+nou;
CinevaFaraNume: nou=u*10+nou; Nu e bun
boiustef: am greşit...
tr. să ai o variabilă
boiustef: do
{
u=nr%10;
nou=nou*10+u;
nr/=10;
}while(nr);
boiustef: int p=1;
do
{
u=nr%10;
nou=u*p+nou;
nr/=10;
p=p*10;
}while(nr);
boiustef: nu uita şi de nou să fie din start 0
Trollea: am inlocuit do si tot nu da

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
1

#include <iostream>

using namespace std;

bool prim(register unsigned long long int x){

if (x < 2) return false;

if (x < 4) return true;

register unsigned int v = x % 6;

if(v != 1 && v != 5)return false;

for(v = 3; v * v <= x; v+=2){

 if(x % v == 0)return false;

}

return true;

}

int main(){

int n,x;

unsigned long long nou = 0;

cin >> n;

while(n-- > 0){

 cin >> x;

 nou = nou * 10 + (x % 10);

}

if(prim(nou))cout << "Numarul este prim";

else cout << "Numarul nu este prim";

}

Fara functii:

#include <iostream>

using namespace std;

int main(){

int n,x;

unsigned long long nou = 0;

cin >> n;

while(n-- > 0){

 cin >> x;

 nou = nou * 10 + (x % 10);

}

bool prim = (nou > 1);

if(prim){

 prim = (nou < 4) || (nou % 6 == 1 || nou % 6 == 5);

 if(prim){

  for(int i = 3; i * i <= nou && prim; i+=2)

   if(nou%i == 0) prim = false;

 }

}

if(prim)cout << "Numarul este prim";

else cout << "Numarul nu este prim";

}

La rezolvarea ta:

#include <iostream>

using namespace std;

int main()

{

int n,i,nr,u,nou=0,is_prime=1,d;

cin>>n;

for(i=1;i<=n;i++)

{

cin>>nr;

u=nr%10;

nou=nou*10+u;

}

is_prime=1;

if(nou<2 || (nou>2 && nou%2==0))

is_prime=0;

else

for(d=3;d*d<=nou;d+=2)

if(nou%d==0)

{

is_prime=0;

break;

}

if(is_prime=1)

cout<<"Numarul este prim";

else

cout<<"Numarul nu este prim";

return 0;

}


boiustef: nu ai aflat iarăşi oglinditul celui aşteptat?
CinevaFaraNume: De ce e nevoie de oglindit?
CinevaFaraNume: Primul numar -> nou = c1
Al 2-lea numar-> nou = c1*10 + c2
Al 3-lea numar -> nou = c1*100+c2*10+c3 ....
La fiecare numar nou ultima cifra se adauga la sfarsit
Trollea: exista alta variantade rezolvare fara return ??
CinevaFaraNume: Adica fara functii?
Trollea: da sa fie ceva gen o completare la rezolvarea mea
Trollea: #include

using namespace std;

int main()
{
int n,i,nr,u,nou=0,is_prime=1,d,p=1;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>nr;
do
{
u=nr%10;
nou=u*p+nou;
nr/=10;
p=p*10;
}while(nr);
is_prime=1;
if(nou<2 || nou>2 && nou%2==0)
is_prime=0;
else
for(d=3;d*d<=nou;d+=2)
if(nou%d==0)
{
is_prime=0;
break;
}
if(is_prime=1)
cout<<"Numarul "< else
cout<<"Numarul nu este prim";
}
return 0;
}
Trollea: am modificat dar tot nu da
Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int n,i,nr,u,nou=0,is_prime=1,d;

   cin >> n;

   for(i=1; i <= n; i++)

   {

       cin>>nr;

       u=nr%10;

       nou=nou*10+u;

   }

   is_prime=1;

   if(nou<2 || (nou>2 && nou%2==0))

       is_prime=0;

   else

       for(d=3; d*d <= nou; d+=2)

           if(nou%d==0)

           {

               is_prime=0;

               break;

           }

   cout << nou << " ";

   if (is_prime==1)

       cout << "prim ";

   else

       cout << "nu este prim";

   return 0;

}

Explicație:

am redactat programul tău... am afişat şi numărul creat.   nu trebuia while acolo doar se ia numai ultima cifră de la fiecare număr introdus...


Trollea: mersii mult de tot\
boiustef: cu plăcere, succese!
Alte întrebări interesante