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
40
de 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,
12
concatenat cu5
este125
, iar5
concatenat cu12
este512
.
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; }