infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Catalin din Februarie 08, 2014, 19:26:19



Titlul: Cifrele impare dintr-un numar
Scris de: Catalin din Februarie 08, 2014, 19:26:19
Salut. Cum pot crea un vector cu cifrele impare ale unui numar? De exemplu pentru numarul n=12345532 sa am vectorul V format din cifrele 1,3,5,5,3. Am calculat cate cifre impare are numarul, dar nu stiu sa le afisez! Dati-mi va rog o idee. Multumesc.


Titlul: Răspuns: Cifrele impare dintr-un numar
Scris de: Puscas Sergiu din Februarie 09, 2014, 11:43:02
Cod:
dim = 0;
while(n) {
  if(n%2 == 1) digit[++dim] = n % 10;
  n /= 10;
}

for(int i=dim; i>=1; i--) cout<<digit[i]<<" ";

digit[] - vectorul in care tii cifrele impare
dim - ultima pozitie ocupata din digit[]
De fiecare data cand numarul curent ii impar (-> are ultima cifra para), se adauga ultima cifra pe urmatoarea pozitie libera din vector.
Cifrele sunt eliminate de la dreapta la stanga, deci le tiparesti in ordine inversa, de la dim (=ultima pozitie) la 1 (prima).


Titlul: Răspuns: Cifrele impare dintr-un numar
Scris de: Catalin din Februarie 09, 2014, 15:56:49
Mersi mult. Imi poti explica te rog ce inseamna
Cod:
digit[++dim]
. Chestia asta cu ++dim detaliaz-o te rog putin :) Nu am mai intalnit-o pana acum.


Titlul: Răspuns: Cifrele impare dintr-un numar
Scris de: Puscas Sergiu din Februarie 09, 2014, 17:39:34
Operatorul "++" iti incrementeaza (aduna 1) la obiectul asupra caruia il aplici.
Poate fi folosit in 2 moduri, prefix (++dim) sau postfix (dim++).
Diferenta e ca "++dim" il incrementeaza pe dim, dupa care il transmite ca pozitie in vector. Pentru dim = 4, digit[++dim] indica spre digit[5].
"dim++" il transmite mai intai ca pozitie, dupa care il incrementeaza. Pentru dim = 4, digit[dim++] indica spre digit[4], dupa care dim devine 5.

Poti folosi in cazul de fata si "dim++", dar o sa ai de parcurs la final intervalul dim-1 -> 0 in loc de dim -> 1.