Informatică, întrebare adresată de Darius1502, 8 ani în urmă

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.
Programul citește de la tastatură perechi de numere naturale. Citirea se încheie la introducerea a două valori nule.
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.

Intrare

14 516
14 416
13 13
123 321
156 2651
456 674
0 0
Ieșire

3

Problema este de pe pbinfo, are codul #1410, dar imi da doar 80 din 100p.
Poate cineva sa-mi spuna ce e gresit la codul meu ?(Stiu lucra cu functii, dar nu si cu vectori)

#include

#include
using namespace std;

int oglindit (int x);
int contacnat (int a, int b);

int main()
{
int a=1 , b=1, contor=0;
cin >> a >> b;
while (a!=0 and b!=0)
{
if (oglindit(contacnat(a,b))==contacnat(a,b))
contor++;
else
if (oglindit(contacnat(b,a))==contacnat(b,a))
contor++;
cin >> a >> b;
}
cout << contor;
return 0;
}

int oglindit(int x)
{
int o=0;
while (x)
{
o=o*10+x%10;
x/=10;
}
return o;
}

int contacnat(int a, int b)
{
int clonab;
int c=1;
clonab=b;
while (clonab)
{
c*=10;
clonab/=10;
}
a=a*c;
a=a+b;
return a;
}


Razzvy: Daca numerele pot avea pana la 6 cifre, atunci concatenarea lor ar avea 12 cifre. Asta iese din tipul de date int. Ai nevoie de long long.
Darius1502: Nu merge nici cu long long, am incercat deja
Razzvy: Schimba totul in long long
Razzvy: Si eu incercasem prima data si nu mergea, dar trebuie sa schimbi si functiile, si tipul de date pe care il returneaza
Razzvy: Testeaza-ti programul pentru cazul: 999999 999999

Răspunsuri la întrebare

Răspuns de S0unds
0
#include <iostream>
using namespace std;
int main ()
{
int x,y,a,b,c,d,i,z,n=0;
while (x!=0 && y!=0)
{
cin>>x>>y;
a=x; b=y;
i=0;z=1;
while (a!=0)
{
a=a/10; i++;
}
for (int j=1;j<=i;j=j*10)
z=j;
c=b*z+a;
i=0;z=1;
while (b!=0)
{
b=b/10; i++;
}
for (int j=1;j<=i;j=j*10)
z=j;
d=a*z+b;
if (c==d)
n++;
}
cout<<n;
return 0;
}

Darius1502: Am rezolvat, nu mergea din cauza functiei, mersi oricum
Alte întrebări interesante