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

sortowanie rekurencyjnie w C

Object Storage Arubacloud
0 głosów
66 wizyt
pytanie zadane 16 stycznia w C i C++ przez hIO Nowicjusz (150 p.)

Jest mi ktoś w stanie powiedzieć dlaczego funkcja sprawdzająca czy liczba ma cyfry ustawione rosnąco działa a czy malejąco już nie?

int is_sorted_asc(unsigned long long number) {
    if (number == 0) {
        return 1;
    }
    if (number % 10 < (number / 10) % 10) {
        return 0;
    }
    return is_sorted_asc(number / 10);
}

int is_sorted_desc(unsigned long long number) {
    printf("Number: %llu\n", number);
    if (number == 0) {
        return 1;
    }
    if (number % 10 > (number / 10) % 10) {
        return 0;
    }
    return is_sorted_desc(number / 10);
}

 

1 odpowiedź

0 głosów
odpowiedź 16 stycznia przez Wiciorny Ekspert (270,230 p.)
edycja 16 stycznia przez Wiciorny

A sprawdź sobie rekurencyjnie co się dzieje.

np. dla zestawu danych 54321 - ostatnia cyfra rekurencyjnie będzie 5

Dla porządku malejącego, jeżeli ostatnia cyfra jest większa niż poprzednia, to liczba nie jest malejąca

 

Number: 54321
Number: 5432
Number: 543
Number: 54
Number: 5
Liczba nie jest malejąca.

Ostatnia cyfra jest największa.

Druga sprawa - typ danych, który podajesz  podczas operacji dzielenia (number / 10) - powoduje ze wynikiem number / 10 może być wartość niecałkowita, a używając unsigned long long, tracisz część dziesiętną, co tez moze wplywac na wynik 

 

int is_sorted_desc(unsigned long long number) {
    if (number == 0) {
        return 1;
    }
    if (static_cast<long long>(number % 10) < static_cast<long long>((number / 10) % 10)) {
        return 0;
    }
    return is_sorted_desc(number / 10);
}

int main() {
    unsigned long long num_desc = 1234;

    if (is_sorted_desc(num_desc)) {
        std::cout << "Liczba jest malejąca." << std::endl;
    } else {
        std::cout << "Liczba nie jest malejąca." << std::endl;
    }

    return 0;
}

//Liczba jest malejaca, jak odwrocisz to na 54321 to okresli Ci ze nie jest malejaca 

 

Podobne pytania

+1 głos
1 odpowiedź 607 wizyt
pytanie zadane 13 lutego 2019 w C i C++ przez Adam249 Nowicjusz (160 p.)
–3 głosów
2 odpowiedzi 393 wizyt
pytanie zadane 13 marca 2018 w C i C++ przez Damian918 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,062 wizyt
pytanie zadane 24 listopada 2017 w C i C++ przez tiesto.ulic Obywatel (1,010 p.)

92,581 zapytań

141,433 odpowiedzi

319,666 komentarzy

61,966 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!

...