algorytm.org

Suma cyfr liczby całkowitej

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Suma cyfr liczby całkowitej
Ocena użytkowników:***** / 49
SłabyŚwietny 
Wpisany przez Tomasz Lubiński, 11 stycznia 2011 13:45

Załóżmy, że mamy daną liczbę x i chcemy obliczyć sumę jej cyfr. Czyli, na przykład, jeżeli mamy daną liczbę x = 148, to w wyniku otrzymamy 1+4+8 = 13.

By rozwiązać to zadanie potrzebne będą nam dwie operacje:
By obliczyć sumę cyfr liczby x musimy wykonać następujące kroki:

Operację obliczania sumy cyfr liczby całkowitej x możemy zapisać następującym schematem blokowym:

schemat blokowy - suma cyfr liczby całkowitej


Przykład:

Niech x będzie równe 148.
Na początku wynik ustawiamy na 0.
Dochodzimy do decyzji, czy x jest równe 0?
Nie, zatem:
wynik = wynik + (x mod 10) = 0 + (148 mod 10) = 0 + 8 = 8
x = x div 10 = 148 div 10 = 14
Sprawdzamy po raz kolejny, czy x jest równe 0?
Nie, zatem:
wynik = wynik + (x mod 10) = 8 + (14 mod 10) = 8 + 4 = 12
x = x div 10 = 14 div 10 = 1
Sprawdzamy po raz kolejny, czy x jest równe 0?
Nie, zatem:
wynik = wynik + (x mod 10) = 12 + (1 mod 10) = 12 + 1 = 13
x = x div 10 = 1 div 10 = 0
Sprawdzamy po raz kolejny, czy x jest równe 0?

Tak, zatem obliczyliśmy sumę cyfr liczby x=148, i wynik ten wynosi 13.

Przykład w JavaScript:

Podaj liczbę (dziesiętnie):
Podaj podstawę:

Dla zaawansowanych:
Przedstawiony algorytm oblicza sumę liczb dla systemu dziesiętnego. Można go jednak łatwo zaadoptować do obliczania sumy cyfr dla systemu liczbowego o dowolnej podstawie (np. dwójkowego lub szesnastkowego). W tym celu wystarczy przerobić fragment:
wynik = wynik + (x mod 10)
x = (x div 10)
na:
wynik = wynik + (x mod podstawa)
x = (x div podstawa),
gdzie podstawa jest wartością podstawy systemu liczbowego, dla którego chcemy obliczyć sumę cyfr (2 dla systemu dwójkowego, 10 dla dziesiętnego, 16 dla szesnastkowego, itp...). Jeżeli chcesz zobaczyć jak liczby dziesiętne wyglądają w innych systemach przeczytaj artykuł zamiana z i na system dziesiętny


Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz LubińskiC#MS Visual Studio .net
.cs
.cs
***** / 4
Tomasz LubińskiC/C++
.cpp
.cpp
***** / 11
MarianC/C++C++
.cpp
.cpp
***** / 5
AdamC/C++C++, funkcja obliczająca wynik
.cpp
.cpp
***** / 8
Tomasz LubińskiDelphi/PascalBorland Delphi 5
.pas
.pas
***** / 4
Tomasz LubińskiJava
.java
.java
***** / 6
Tomasz LubińskiJavaScript
.js
.js
***** / 6
Dominik GoździukPerl
.pl
.pl
***** / 0
_marass_Php
.php
.php
***** / 4
Jakub KoniecznyPython
.py
.py
***** / 3
Nikodem SolarzRubymetoda obliczająca sumę cyfr dowolnej liczby z dowolnego systemu liczbowego
.rb
.rb
***** / 0
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 27 maja 2011 07:18
Komentarze
photo
-4 # Daniel wilkowski 2011-02-08 20:37
Można chyba lepiej
Zamienić liczbę na string;
Znaleźć długość ciągu;
pętla 1 do długość
S = S + Ciąg[I];
I = I + 1;
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Asiofhadsiop 2011-10-28 22:57
Funkcja co zmienia z liczby na stringa wykonuje właśnie ten algorytm. Tylko różnica jest taka, że w takim Pascalu musisz sobie zmieniać wartości z chara na byte, co jest trochę niewygodne.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # mx 2016-01-18 12:05
teoretycznie masz rację ale:
pisaliśmy kiedyś na studiach program badający losowość generatora liczb pseudolosowych sprawdzając rozkład wartości poszczedólnych cyfrach.
Przy dużej ilości próbek kluczowe dla wydajności okazało się zamiana liczby na postać dziesiętną.
Osoba, która użyła zamiany na string miała wynik od razu a pozostałym komputery mieliły dobre kilkadziesiąd sekund.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Michael 2013-12-01 17:54
A jak to zrobić w Calcu lub Excelu bez makra?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Michał_Dd 2016-01-20 11:12
Polecam dodać jeszcze obsługę liczb ujemnych, gdzie suma cyfr będzie dodatnia.
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz