fbpx

Problema #1410 – Numere12 – Rezolvari PBInfo

de Mihai-Alexandru

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 cu 5 este 125, iar 5 concatenat cu 12 este 512.

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

S-ar putea sa iti placa