Informatică, întrebare adresată de sacalu50, 9 ani în urmă

Cum fac ca un nr dupa cea i au fost prelucrate cateva cifre sa apara tot in ordinea lui de ex:12523 2 7.S-a înlocuit cifra 2 cu cifra 7 în numărul 12523 și s-a obținut numărul 17573.


artur99: De obicei se rescrie, nu se prelucrează :D Îl poți și prelucra, dar e mult mai ușor să îl rescrii. Care variantă vrei să o folosești?

Răspunsuri la întrebare

Răspuns de artur99
0
Varianta folosită e rescrierea și înlocuirea când se rescrie în altă variabilă, dar dacă vrei să faci cu înlocuire, se poate și așa. O să dau un exemplu unde s-ar înlocui o singură cifră, și apoi doar repeți procesul la celelalte:
n=123456 (înlocuim 4 cu 9, de exemplu)
Parcurgem fiecare cifră, de la coadă, și presupunem că am ajuns la a 3-a
x = 3;
Ca să aflăm cifra, facem așa:
n % pow(10, x) / pow(10, x-1)
(Ar fi: n % pow(10, 3) / pow(10, 2) = n % 1000 / 100, care bănuiesc că îți dai seama că fa scoate a x-a cifră)
Acum, verificăm dacă a 3-a(x-a) cifră este cea care o înlocuim. Dacă nu este, creștem x-ul(trecem la cea de mai la stânga), iar dacă e, trebuie înlocuită. Asta se face așa: se ia partea din număr de la stânga cifrei înlocuite(fiind int, se împarte la 10^x), se înmulțește cu 10, se adaugă noua cifră, iar apoi se înmulțește cu 10^(x-1), iar apoi se adaugă restul de după cifra înlocuită (n%(10^(x-1))).
Deci formula ar fi:
n = ( ( n / pow(10, x) ) * 10 + Noua_cifră ) * pow(10, x-1) + n % pow(10, x-1);
Mai practic, pe exemplul nostru(n fiind 123456, x fiind 3, noua_cifră fiind 9):
n = ( ( n / 1000 ) * 10 + noua_cifră ) * 100 + n % 100;
      ( ( 123456 / 1000 ) * 10 + 9 ) * 100 + 123456 % 100
      ( ( 123 * 10 + 9 ) * 100 + 56 )
      ( 1239 * 100 + 56 )
      ( 123900 + 56 )
      123956

*pow(x, y) e echivalent cu x^y (x la puterea y), și ca să îl folosești ai nevoie de librăria <math.h>, dar dacă nu vrei librăria asta, poți folosi și un simplu for, la fiecare pow de care ai nevoie:
r = 1;
x = 10;
y = 3;
for(i=0;i<y;i++) r = r * x;
și ai în r rezultatul puterii

AntiEaglesDavids: lol
artur99: ceee?
artur99: :)))
AntiEaglesDavids: PREA LUNG
AntiEaglesDavids: NU FOLOSI POW
artur99: păi, păi, nu știu alte funcții de ridicat la putere
AntiEaglesDavids: nu-ti trebe
artur99: Voiai să fac cu for?
AntiEaglesDavids: for_each
Alte întrebări interesante