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

Fiind dat un număr natural n înlocuiți toate aparițiile cifrei c1 din numărul n cu cifra c2.

Răspunsuri la întrebare

Răspuns de artur99
74
Acum că știi cât de costisitoare era înlocuirea în numărul inițial, o să vezi cât de ușoară e la rescriere:

o să avem o variabilă d care o vom tot înmulți cu 10 pentru a obține pe rând 1, 10, 100, 1000, etc, ca să rescriem numărul, și o variabilă n2 în care o să fie numrăul rescris

d = 1;
n2 = 0;

//Acum, luăm cifrele numărului n, cu un while, pe rând, până nu mai rămâne cu cifre:
while(n>0){
  //Acum luăm cifra din capătul lui n
  t = n % 10;
  //O înlocuim dacă este nevoie
  if(t==c1) t=c2;
  //Acum o scriem în n2, pe poziția d(cum ar veni, el zice dacă e numărul unității, numărul zecilor, numărul sutelor, numărul miilor, etc, pur și simplu înmulțind cifra cu d(*1 sau *10 sau *100 sau *1000 etc)
  n2 = n2 + t*d;
  //Fiindcă am terminat cu această cifră și urmează să trecem la următoarea, creștem d-ul (îl înmulțim cu 10, ca să mai punem un 0), iar apoi scoatem ultima cifră din n
  d = d * 10;
  n = n / 10;
}

Și asta ar fi tot, afișăm n2(dacă vrei, îl copii în n, și afișezi n), și gata. Acum să îl rescriem pe tot:


#include <iostream>
using namespace std;
int main(){
    int n, c1, c2, t, n2=0, d=1;
    cin>>n;
    cin>>c1;
    cin>>c2;
    
    while(n>0){
        t = n%10;
        if(t==c1) t = c2;
        n2 = n2 + t * d;
        d = d * 10;
        n = n/10;
    }
    cout<<n2;
}

Acum, opțional, niște optimizări de pentru lungimea codului :D
#include <iostream>
int main(){
    int n, c1, c2, n2=0, d=1;
    std::cin>>n>>c1>>c2;
    while(n)
        n2 += (n%10==c1?c2:n%10) * d, d*=10,  n/=10;
    std::cout<<n2;
}
Alte întrebări interesante