Rezolvare completă PbInfo #1410 Numere12

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Numere12:

#include <iostream>
#include <cassert>
using namespace std;

int main()
{
    int cnt = 0;
    long long a , b;
    cin >> a >> b;
    while(a != 0 && b != 0)
    {
        long long x = a, y = b;
        long long pa  = 1, pb = 1;
        while(x) 
            pa *= 10, x /= 10;
        while(y) 
            pb *= 10, y /= 10;
        long long p, q , ogl;
        p = q = a * pb + b, ogl = 0;
        while(p != 0)
            ogl = 10 * ogl + p % 10, p /= 10;
        if(ogl == q)
            cnt  ++;
        else
        {
            p = q = b * pa + a, ogl = 0;
            while(p != 0)
                ogl = 10 * ogl + p % 10, p /= 10;
            if(ogl == q)
                cnt  ++;
        }
        cin >> a >> b;
    }
    cout << cnt << endl;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1410 Numere12

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1410 Numere12 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!