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

Rekurencja - sumowanie liczb (C++)

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,712 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ź 236 wizyt
pytanie zadane 9 grudnia 2016 w C i C++ przez thekibi27 Bywalec (2,110 p.)
0 głosów
2 odpowiedzi 4,937 wizyt
pytanie zadane 12 sierpnia 2016 w C i C++ przez czmyk Obywatel (1,100 p.)
0 głosów
2 odpowiedzi 1,433 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)

93,190 zapytań

142,205 odpowiedzi

322,038 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2738p. - CC PL
  5. 2704p. - Tomasz Bielak
  6. 2678p. - Łukasz Siedlecki
  7. 2666p. - rucin93
  8. 2485p. - Marcin Putra
  9. 2418p. - Michal Drewniak
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2239p. - Michał Telesz
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...