Am gasit un exeplu pentru care nu merge: 1920 - afiseaza 17.
Atunci cand faci oglinditul, pierzi cifrele de 0 de la sfarsit. Pentru formarea celui de-al doilea numar nu trebuie sa te complici asa de mult, si am folosit mod y:
#include <iostream>
#include <cmath>
using namespace std;
long long n,cn;
int nr,x,y,nrn1,nrn2,X;
int main(){
cin>>n;
cn=n;
do{
nr++;
cn=cn/10;
}
while(cn);
if(nr%2==0)
x=nr/2;
else
x=nr/2+1;
y=pow(10,x);
nrn1=n/y;
if(nr % 2 == 1)
y /= 10;
nrn2 = n % y;
X=abs(nrn1-nrn2);
cout <<X;
return 0;
}
Uite si solutia mea:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
long long a=0,b=0,i,n,n2,j,p;
cin>>n;
i=0;
n2=n;
while(n)
{
n/=10;
i++;
}
n=n2;
p=1;
for(j=1;j<=i/2;j++)
{
b=b+p*(n%10);
p*=10;
n/=10;
}
if(i%2) n/=10;
a=n;
cout<<abs(a-b);
}