356
Cerința
Se citesc perechi de numere naturale până la citirea a două valori nule. Să se determine câte dintre perechile X Y au proprietatea că prin concatenarea lui X cu Y sau a lui Y cu X să se obțină un palindrom.
Date de intrare
Programul citește de la tastatură perechi de numere naturale. Citirea se încheie la introducerea a două valori nule.
Date de ieșire
Programul va afișa pe ecran numărul C, reprezentând valoarea cerută.
Restricții și precizări
- se vor citi cel mult
40de perechi de numere; - ultima pereche citită nu se va lua în considerare;
- toate numerele citite vor fi mai mici decât
1.000.000; - toate numerele citite sunt nenule, cu excepția ultimelor două;
- prin concatenarea a două numere înțelegem “lipirea” lor; de exemplu,
12concatenat cu5este125, iar5concatenat cu12este512.
Exemplu
Intrare
14 516 14 416 13 13 123 321 156 2651 456 674 0 0
Ieșire
3
Explicație
Perechile care respectă regula sunt:
14 416: 41614 este palindrom;
123 321: 123321 este palindrom; la fel și 321123 este palindrom;
156 2651: 1562651 este palindrom.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x,y,cate=0;
cin>>x>>y;
while(x!=0 || y!=0)
{
///calculez puterea lui 10 < x
int px=1;
while(x>=px) px=px*10;
///calculez puterea lui 10 < y
int py=1;
while(y>=py) py=py*10;
///calculez cocatenatele
unsigned long long xy,yx;
xy=1ull*x*py+y;
yx=1ull*y*px+x;
///calculez resturnatele
unsigned long long rxy=0,ryx=0;
unsigned long long cxy=xy,cyx=yx;
while(cxy>0)
{
rxy=rxy*10+cxy%10;
cxy=cxy/10;
}
while(cyx>0)
{
ryx=ryx*10+cyx%10;
cyx=cyx/10;
}
///verific daca e palindrom
if(xy==rxy || yx==ryx) cate++;
cin>>x>>y;
}
cout<<cate;
return 0;
}
Comentarii