Informatică, întrebare adresată de MădălinaSpiridon, 9 ani în urmă

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


daniel22: nu vad vreo greseala, cand n e de o singura cifra ce trebuie sa afiseze?
Razzvy: Cele 80 de puncte sunt pentru limita de timp depasita sau raspuns gresit?
daniel22: raspuns gresit cred

Răspunsuri la întrebare

Răspuns de Razzvy
6
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);
}

ionutg38: #include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n,ct=0,a,y=0,u,p,i,ct1,j,x=0,r=0;
cin>>n;
a=n;
while(a)
{
a/=10;
ct++;
}
if(ct%2==1)
{a=n;p=1;ct1=1;
while(a)
{

if(ct1==ct/2+1)
a/=10;
r+=p*(a%10);
a/=10;p*=10;
ct1++;
}
n=r;
}
a=n;p=1;
for(i=1;i<=ct/2;i++)
{
u=a%10;
y+=p*u;
a/=10;
p*=10;
}

ct1=ct/2;p=1;
while(ct1!=0)
{
p*=10; ct1--;
}
a=n/p;
p=1;
for(j=ct/2;j<=ct;j++)
{
u=a%10;
x+=p*u;
a/=10;
p*=10;
}
cout<<abs(x-y);
}
ionutg38: vei avea 100 puncte
Alte întrebări interesante