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
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;
}
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
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Informatică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă