Program w C++ sumujący cyfry w liczbie

Program w C++ sumujący cyfry w liczbie
VX
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:3
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.

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:2 minuty
  • Postów:4888
0

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


szweszwe
Nie no, płacić to nie chce akurat :D
lion137
Aaaa, mody przeniosły :)
PerlMonk
I dobrze. Cerata działa :)
YO
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:540
0
Kopiuj
#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


Dziura w ścianie gdzie Panowie widzą Panie,
Rick and Morty, season 1.
Szukam tej dziury, jak coś dajcie znać gdzie jest :D "A z Ciebie c**** pisowski" - Ula Papuszko (w sensie, że JA) 05.06.2020 r., grupa: Strajk Przedsiębiorców. Witam zatem, jestem c**** pisowski ;)
VX
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:3
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.

Zobacz pozostały 1 komentarz
YO
sprawdziłem dla n=336 i wyszło 3 tak jak powinno być , dla n=333 wyszło 9 też jest ok
VX
@youmound: Od nr1 do nr4 stopniowo dodaje do siebie cyfry od końca. Najpierw ostatnią z przedostatnią, potem ich sumę z cyfrą poprzedzającą i aż tak do wyniku 29. Potem już nie wiem co się dzieje
YO
@VorteXowy: to wina algorytmu czy czego? :D
VX
@youmound: zdecydowanie algorytmu. Powinien Od razu dodać wszystkie wprowadzone cyfry do siebie i podać wynik. Następnie powtarzać dodawanie cyfr do momentu gdy liczba nie będzie dwuczłonowa (10>n>0)
YO
https://stackoverflow.com/questions/26191733/how-to-make-sum-in-a-single-digit przetestowałem kilka przykładów, i to samo :D różne dziwne krokowe obliczenia ... albo trzeba je jakoś ukryć, albo się nie ma na to wpływu
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:2 minuty
  • Postów:4888
0

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


Zobacz pozostałe 6 komentarzy
YO
Pośrednie wyniki są złe, ostateczne są zawsze dobre ... więc? ...
YO
Więc może pokaż swoje rozwiązanie ... :)
lion137
Nie mogę, może komuś biznes zepsuję :) Mogę napisać i Ci wysłać na priv, jak Chcesz :)
YO
Wyślij. Chętnie zobaczę, czy Twój będzie działał poprawnie ;]
Delor
W poleceniu jest o wyświetleniu pośrednich kroków więc ... trudno uznać poprawnym algorytm wyświetlający poprawnie jedynie ostatni krok.
VX
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:3
0

A coś takiego by się sprawdziło?

Kopiuj
#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;
}
}
edytowany 1x, ostatnio: VorteXowy
YO
Sprawdziłeś jak to działa? zapętla się
YO
drukując 1.#INF
VX
Jestem na telefonie i nie mam jak w tym momencie
M7
Zamień w pętli i++ na i-- to się nie bedzie zapętlał. Tylko jaki jest cel wyświetlania kolejnych potęg z 10?
DN
  • Rejestracja:około 3 lata
  • Ostatnio:około 3 lata
  • Postów:1
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;

}

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)