In C++, cu while, va rog
Cerinta
Scrieti un algoritm care citeste de la tastatura mai multe numere pana la aparitia cifrei 0. In momentul cand s-a citit aceasta cifra, programul se opreste din executie si arata cel mai mare divizor al numerelor citite pana in acel moment.
Date de intrare
Se citesc de la tastatura numerele pana la intalnirea lui 0.
Date de iesire
Se vor afisa pe ecran toti cel mai mare divizor al numerelor citite.
Restrictii si precizari
Pentru orice numar X citit se garanteaza faptul ca: 0 < X < 1,000,000,000
Exemplu
Date de intrare Date de iesire
60 36 40 80 0 4
Răspunsuri la întrebare
Răspuns de
1
Răspuns:
#include <iostream>
using namespace std;
int main()
{unsigned int x,copx,cmmdc,ult;
bool ok=1;
cin>>x;
ult=x;
cin>>x;
copx=x;
{if(copx>ult)
copx=copx-ult;
else
ult=ult-copx;}
cmmdc=copx;
ult=x;
while (x!=0)
{cin>>x;
if (x!=0)
{copx=x;
while(ult!=copx)
{if(copx>ult)
copx=copx-ult;
else
ult=ult-copx;}
if (ok==1)
if (cmmdc==copx)
cmmdc=copx;
else
if (cmmdc<copx)
{while (copx>cmmdc)
copx=copx-cmmdc;
if (cmmdc!=copx)
ok=0;}
else
{if (cmmdc>copx)
while (cmmdc>copx)
cmmdc=cmmdc-copx;
if (cmmdc!=copx)
ok=0;}
ult=x;}}
cout<<cmmdc;
return 0;
}
copx --> copia lui x
ult --> ultimul x citit
fatman195322:
Foarte posibil sa nu fie cea mai eficienta varianta; poate-l poti micsora tu.
using namespace std;
int main()
{
int x,y,cmmdc;
cin>>x;
if (x!=0)
{
cin>>y;
while (x!=y)
{
if (x>y)
{
x=x-y;
}
if (y>x)
{
y=y-x;
}
}
cmmdc=x;
cin>>x;
if (x!=0)
{
while (cmmdc!=x)
{
if (cmmdc>x)
{
cmmdc=cmmdc-x;
}
if (x>cmmdc)
{
x=x-cmmdc;
}
}
}
cmmdc=cmmdc;
}
cout< return 0;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Fizică,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă