program wyznaczający sumę n początkowych liczb, których suma cyfr wynosi 100.

0

Napisz program wyznaczający sumę n początkowych liczb, których suma cyfr wynosi 100. Liczbę n należy pobrać od użytkownika.

#include <iostream>
#include <cstdlib>

using namespace std;




int main()

 {

 int n;
 int suma;
 int ile;
 int liczba;
 int cyfra;
 int sumacfr;
 int wynik;

cin>>n;


suma=0;
liczba=0;
ile=0;
sumacfr=0;
wynik=0;



    while(ile<n)

{
do
{

        cyfra=wynik%10;
        wynik=wynik/10;     // Liczeniesumy cyfr
        sumacfr+=cyfra;

cout<<sumacfr<<endl;

}
 while(wynik=0);

if(sumacyfr==100)
{
    suma+=liczba;
    ile++;
}




liczba++;
wynik++;

}



  return 0;
}

Ktos moze wie gdzie popelniam blad w mysleniu? HELP!

0

Nie rozumiem zamysłu stojącego za do {…} while (wynik = 0). W ten sposób, po pierwsze, pętla wykona Ci się dokładnie raz, a po drugie, przypiszesz wynik wartość zero. Nie wiem, co tu chciałeś zrobić, bo i w porównaniu wynik == 0 nie widzę specjalnie sensu…

0

Chodzilo mi w tej petli o wyznaczenie sumy cyfr a while(wynik=0) to warunek gdzie wynik/10 = 0 czyli juz brak kolejnych cyfr. Jak inaczej moglbym to zrobic?

0

No nie. Warunek wynik = 0 oznacza „przypisz zmiennej wynik wartość zero”, po czym oceniana jest jego wartość logiczna — przy intach w C++ wygląda to tak, że zero oznacza fałsz, a pozostałe wartości prawdę. Tak więc wynik = 0 jest warunkiem zawsze fałszywym, który pewnie kompilator uprości.

Jak inaczej? Najczytelniejsze i najbardziej naturalne będzie, jak już pisałem, wydzielenie funkcji liczącej sumę cyfr. Wtedy w głównej pętli pojawi Ci się po prostu coś takiego:

if (100 == sumOfDigits(number)) {
    sum += number;
    --numbersLeft;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1