Program w C++ sumujący cyfry w liczbie

0

Witam.
Nie mam pomysłu jak zabrać się za takie oto zadanie:
**
"Dla podanej liczby całkowitej nieujemnej n, obliczy sumę wszystkich jej cyfr i wyświetli
otrzymany wynik, a następnie powtórzy te dwie czynności dla obliczonej sumy, itd. Ten proces
winien być zakończony, gdy obliczona suma cyfr będzie liczbą jednocyfrową, np. dla n=7895,
należy wyświetlić liczby: 29, 11, 2."**

Potrzebuję napisać do tego zadania program w C++ wykorzystujący pętle while.
Czy ktoś mógłby mi pomóc i napisać takowy program oraz go opisać bym go zrozumiała?
Bardzo dziękuję za pomoc.

0

Naprawde za to Chcesz płacić? Przecież to prościutki program, jest on nawet na forum.

0
#include <iostream>

using namespace std;

int main()
{
    int n=0, sum=0,i=0;
    
    do {
    cout << "Daj mi n, a jak dasz mi ujemne to masz przesrane:   "; cin >> n;
    
    if (n < 0) cout << "masz przesrane";
} while (n <0);


while (n > 0 || sum > 9)
    {
        ++i;
        
        if(n == 0) 
        { 
            n = sum; 
            sum = 0; 
        } 
        
        sum = sum + n % 10;
        n = n / 10;
        
        cout << "Sumowanie nr : " << i << " wynosi : " << sum << "\n\r";
    }

cout << "\n\r Ostatecznie suma wynosi: " << sum  << "\n\r";

//cout << "dodatnie";
    
    system("pause");
 return 0;   
}

Daj mi n, a jak dasz mi ujemne to masz przesrane: 7895
Sumowanie nr : 1 wynosi : 5
Sumowanie nr : 2 wynosi : 14
Sumowanie nr : 3 wynosi : 22
Sumowanie nr : 4 wynosi : 29
Sumowanie nr : 5 wynosi : 9
Sumowanie nr : 6 wynosi : 11
Sumowanie nr : 7 wynosi : 1
Sumowanie nr : 8 wynosi : 2

Ostatecznie suma wynosi: 2
Aby kontynuować, naciśnij dowolny klawisz . . .

Mądry programiści, czemu te wyniki są takie do d**y? :D ostateczny jest ok, ale po drodze są nie zrozumiałe dla mnie kroki :(
Ja tam programistą nie jestem, matematykiem też.. Chwilę mi zajęło zrozumieć skąd te 11 , i 2 się wzięło XDD Ale zdaje się, że działa ok, tylko nie rozumiem wyników.

Ps. można oczywiście wyłączyć sumowania z pętli ... ich wyświetlenie jest tylko pomocne aby zrozumieć jak to działa. Myślę, że kodu nie trzeba tłumaczyć... ani tego co znaczy mieć przesrane jak się stawi ujemną liczbę :} Lepiej nie wstawiać :D

0

No też nie rozumiem twoich wyników. Program powinien sumować wszystkie cyfry w danej liczbie, w drugiej pętli 29, jak dodamy 2+9 wychodzi nam 11. W trzecim podejściu 1+1=2 i ostateczny wynik to 2.

0

@youmound
Co za bzdury, dla 7895, powinno być: 29, 11, 2.

0

A coś takiego by się sprawdziło?

#include <iostream>
#include <math.h>

using namespace std;
int main()
{

int liczba;
cin >> liczba;
int b=1;
while(liczba=liczba/10) (b++);
cout << "ilość cyfr: " << b << endl;

for(int i=b-1; i>=0; i++) 
{ cout << pow(10,i) << endl;
}
}
0

Dziwnym trafem, dziś dostałem to samo zadanie.. więc tak bym to napisał:

/* 2. dla podanej liczby całkowitej nieujemnej n, obliczy sumę wszystkich jej cyfr i wyświetli
otrzymany wynik, a następnie powtórzy te dwie czynności dla obliczonej sumy, itd.Ten proces
winien być zakończony, gdy obliczona suma cyfr będzie liczbą jednocyfrową, np.dla n = 7895,
należy wyświetlić liczby : 29, 11, 2. */

#include <iostream>
using namespace std;

int Counting(int number) {
int amount = 0;

while (number > 0)
{
	amount += 1;
	number /= 10;
}
return amount;

}
int Summation(int number) {
int sum = 0;
short temp = 0;

while (number != 0) {
	temp = number % 10;
	sum += temp;
	number /= 10;
}
return sum;

}

int main()
{
int number, operation;
int summed = 0;
int i = 0;
int NewOperation = 0;

cout << "Wpisz prosze liczbe, liczbe całkowita nieujemna:\n";
cin >> number;
operation = number;
NewOperation = Counting(operation);

while (NewOperation > 1) {
	i++;
	summed = Summation(operation);
	operation = summed;
	NewOperation = Counting(summed);
	cout << "Suma nr." << i << ": " << summed << endl;
}
return 0;

}

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