| AurelG a întrebat:

Salut, am facut si eu algoritmul prezentat mai jos, pentru aflarea cifrei de control in c++, insa nu reusesc sa imi dau seama care este scopul lui acel while >(n9). Recunosc ca m-am inspirat din alta parte, pentru ca fara acea conditie nu imi mergea.
#include
#include
using namespace std;
int n, s, j;
int main()
{
cout > n;
j = n;
while >(n9)
{
s = 0;
while (n!= 0)
{
s = s + n % 10;
n = n / 10;
}
n = s;
}
cout

Răspuns Câştigător
| flixbuster a răspuns:

Cand nu intelegi ceva la un algoritm, cel mai bine este sa il rulezi cu creionul pe hartie.

Ideea de baza a algoritmului e sa izolezi ultima cifra din numar, apoi sa shift-ezi numarul spre dreapta eliminand ultima cifra si repeat.

Apropo:
1. cred ca initializarea s=0 trebuie sa fie inainte lui while;
2. j nu are nici un rost;
3. pierzi ultima cifra.

Sa rulam:

n = 123
s = 0

Iteratia 1:
123 > 9: da
123!= 0: da
s = 0 + 123 % 10 (rest impartire intreaga) = 0 + 3 (ai izolat ultima cifra) = 3
n = 123 / 10 (impartire intreaga) = 12

Iteratia 2:
12 > 9: da
12!= 0: da
s = 3 + 12 % 10 (rest impartire intreaga) = 3 + 2 (ai izolat ultima cifra) = 5
n = 12 / 10 (impartire intreaga) = 1

Iteratia 3:
1 > 9: nu

n = 5 (e cam ciudat sa pui suma in n si oricum este gresit, pierzi ultima cifra)

Corectie, in loc de n = s folosim s = s + n:
s = 5 + 1 = 6 (daca pana acum ai calculat suma in s pare logic sa continui tot cu s si asa este corect, ai adunat si ultima cifra).

3 răspunsuri:
| sierra1 a răspuns:

Programul tău nu e ok poate din cauza site-ului. Fă o captură și postează poza cu codul undeva, apoi mai vb

| AurelG explică:

Acum e mai bine?
#include
#include
using namespace std;
int n, s, j;
int main()
{
cout > n;
j = n;
while (n>9)
{
s = 0;
while (n!= 0)
{
s = s + n % 10;
n = n / 10;
}
n = s;
}
cout

| suntserios a răspuns (pentru AurelG):

Nu, nu ai sa poti posta semnul mai mic aici

| flixbuster a răspuns (pentru AurelG):

Cand nu intelegi ceva la un algoritm, cel mai bine este sa il rulezi cu creionul pe hartie.

Ideea de baza a algoritmului e sa izolezi ultima cifra din numar, apoi sa shift-ezi numarul spre dreapta eliminand ultima cifra si repeat.

Apropo:
1. cred ca initializarea s=0 trebuie sa fie inainte lui while;
2. j nu are nici un rost;
3. pierzi ultima cifra.

Sa rulam:

n = 123
s = 0

Iteratia 1:
123 > 9: da
123!= 0: da
s = 0 + 123 % 10 (rest impartire intreaga) = 0 + 3 (ai izolat ultima cifra) = 3
n = 123 / 10 (impartire intreaga) = 12

Iteratia 2:
12 > 9: da
12!= 0: da
s = 3 + 12 % 10 (rest impartire intreaga) = 3 + 2 (ai izolat ultima cifra) = 5
n = 12 / 10 (impartire intreaga) = 1

Iteratia 3:
1 > 9: nu

n = 5 (e cam ciudat sa pui suma in n si oricum este gresit, pierzi ultima cifra)

Corectie, in loc de n = s folosim s = s + n:
s = 5 + 1 = 6 (daca pana acum ai calculat suma in s pare logic sa continui tot cu s si asa este corect, ai adunat si ultima cifra).