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?
Răspunsuri la întrebare
Răspuns de
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);
}
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);
}
#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);
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Chimie,
8 ani în urmă
Geografie,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă