• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rekurencja - sumowanie liczb (C++)

Object Storage Arubacloud
0 głosów
1,563 wizyt
pytanie zadane 3 października 2016 w C i C++ przez Don Inferno Nowicjusz (120 p.)

Witam, chciałem dowiedzieć się, dlaczego dla wielocyfrowych argumentów funkcja suma_cyfr upiera się przy błędnym wyniku 88. Z czego to wynika? Czy da się to jakoś obejść?

#include <iostream>

using namespace std;

suma_cyfr(long long x)
{
    if(x > 0)
        return x % 10 + suma_cyfr(x / 10);

}

long long x;

int main()
{
    cout << "Sume cyfr jakiej liczby chcesz wyznaczyc: ";
    cin >> x;
    cout << "Suma cyfr wynosi " << suma_cyfr(x);
}

 

1 odpowiedź

0 głosów
odpowiedź 3 października 2016 przez niezalogowany
Spróbuj przebudować projekt, bo kod względnie działa, brakuje co prawda returna dla sytuacji gdy x <= 0 (więc go dopisz).

Ewentualnie powiedz dla jakich przykładów masz taki wynik

http://cpp.sh/6dha
komentarz 3 października 2016 przez niezalogowany
Mu chodzi o liczby, które przekraczają zakres zmiennej long long. Dla takich liczb funkcja zwraca liczbę 88.
komentarz 4 października 2016 przez niezalogowany
Nie jestem w stanie zreprodukować tej sytuacji. Jaki kompilator?
komentarz 4 października 2016 przez niezalogowany

Mi na code::blocks podobnie się pojawia. Kod:

 

#include <iostream>

using namespace std;

long long suma_cyfr(long long x)
{
    if(x > 0)
        return x % 10 + suma_cyfr(x / 10);

}

long long x;

int main()
{
    cout << "Sume cyfr jakiej liczby chcesz wyznaczyc: ";
    cin >> x;
    cout << "Suma cyfr wynosi " << suma_cyfr(x);
}

Koniecznie gdy wpisujemy wartość w konsoli np liczbę 11111111111111111111111111111.

komentarz 4 października 2016 przez niezalogowany
Możliwe ze dla większych kicz robiony jest trim do max value (albo brane jest tylko ileś cyfr) i dlatego rezultat jest zawsze identyczny
komentarz 4 października 2016 przez niezalogowany
Może dodam jeszcze tak na marginesie, że podobnie jest dla innych zmiennych np unsigned long long (87), int (połowę z poprzedniego)...

Podobne pytania

0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 9 grudnia 2016 w C i C++ przez thekibi27 Bywalec (2,110 p.)
0 głosów
2 odpowiedzi 4,772 wizyt
pytanie zadane 12 sierpnia 2016 w C i C++ przez czmyk Obywatel (1,100 p.)
0 głosów
2 odpowiedzi 1,278 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...