👤

Se citește un număr natural n. Acest număr se “împarte” în alte două numere a și b, astfel: a este format din cifrele din prima jumătate a lui n, b este format din cifrele din a doua jumătate a lui n. Dacă n are număr impar de cifre, cifra din mijloc se ignoră. De exemplu, dacă n=9183792, atunci a=918, iar b=792. Să se determine valoarea absolută a diferenței dintre a și b.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieşire
Programul afișează pe ecran numărul X, reprezentând valoarea cerută.

Restricţii şi precizări
1 ≤ n ≤ 1.000.000.000



Exemplu
Intrare

9183792
Ieșire

126
Eu am rezolvat-o dar am doar 80 de puncte

#include
#include
#include
using namespace std;
long long n,cn;
int uc,nr,x,y,nrn,nrn1,og,og1,X;
int main()
{cin>>n;
cn=n;
og=0;
do{
uc=cn%10;
nr++;
og=og*10+uc;
cn=cn/10;
}
while(cn);
if(nr%2==0)
x=nr/2;
else
x=nr/2+1;
y=pow(10,x);
nrn=n/y;

nrn1=og/y;
og1=0;
do{
og1=og1*10+nrn1%10;
nrn1=nrn1/10;
}
while(nrn1);
X=abs(nrn-og1);
cout < return 0;
}


Răspuns :

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);
}