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

[c++]Obracanie ciągu cyfer

VPS Starter Arubacloud
0 głosów
2,036 wizyt
pytanie zadane 2 listopada 2017 w C i C++ przez Dorian Bajorek Dyskutant (7,920 p.)
Witam,użytkownik wpisuję liczbę całkowitą.Muszę wypisać ją w odwrotnej kolejności.Jak takie coś zrobić.

3 odpowiedzi

+2 głosów
odpowiedź 2 listopada 2017 przez mokrowski Mędrzec (155,460 p.)

Jeśli interesuje Cię wyłącznie "odwrócenie liczby", zbędne są jakiekolwiek konwersje czy stosowanie strumieni a nawet std::string. Wystarczy zauważyć że dostęp do ostatniej cyfry to wynik modulo 10 a dostęp do następnej (od prawej) to modulo 10 z podzielonej liczby przez 10.

Odpowiedź (czyli "odwróconą liczbę"), zbudujesz dodając wynik bieżącego modulo i .... przemnożysz przez 10. 

Jeśli jednak chcesz zachować w wyniku odwrócenia wiodące zera (np. odwrócenie 21410 -> 01412 czy 1412?), to nie masz wyjścia. Powinieneś przetwarzać liczbę na napis.

Najpierw próbuj sam... :-)

#include <iostream>

unsigned revValue(unsigned value) {
    unsigned answer = value % 10;
    while(value /= 10) {
        answer *= 10;
        answer += value % 10;
    }
    return answer;
}

int main() {
    std::cout << revValue(8923) << std::endl;
    std::cout << revValue(21410) << std::endl;
}

 

komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
Dobry pomysł, na to nie wpadłem :)
0 głosów
odpowiedź 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
edycja 2 listopada 2017 przez Jakub 0
Możesz na przykład zmienić ją na napis (no czyli na string lub *char w c): https://4programmers.net/C/Konwersje_int_na_string_i_string_na_int , jako napis odwrócić (to prosty algorytm, znajdziesz w google czy na yt) i przekonwertować ją znowu na int czy doduble, jak tam miałeś na początku...
komentarz 2 listopada 2017 przez Dorian Bajorek Dyskutant (7,920 p.)
Jest to jakaś tam opcja rozwiązania którą rozważałem.Przetestuje i tam znać
0 głosów
odpowiedź 2 listopada 2017 przez Bondrusiek Maniak (61,370 p.)
edycja 2 listopada 2017 przez Bondrusiek

Witam,

do takiego zadania możesz użyć strumieni

Przykład:


#include <iostream>
#include <vector>
#include <sstream>
#include <cstdlib>
using namespace std;


int main()
{
    int liczba;
    cin >> liczba;

    stringstream stream;
    stream << liczba;

    string licz = stream.str();

    string newLiczba = "";

    for(int i = licz.length()-1; i >= 0 ; --i)
    {
        newLiczba += licz[i];
    }


    int nowaLiczba1 = std::stoi(newLiczba);
    cout << "To jest odwrot int " << nowaLiczba1 << endl;

    return 0;
}

 

komentarz 2 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)
edycja 2 listopada 2017 przez Jakub 0
Spoko, ale po co dawać od razu gotowe rozwiązanie?, To zadanie jest mega proste i lepiej kiedy je sam rozwiąże :)
1
komentarz 2 listopada 2017 przez Bondrusiek Maniak (61,370 p.)

Niby tak ale jak robi jakiś większy projekt to być może utknął na takiej pierdółce i potrzebuje tylko rozwiązać drobną funkcjonalność.

Jeśli będzie zainteresowany może doczytać bardziej fachowe informacje:

1
komentarz 2 listopada 2017 przez j23 Mędrzec (194,920 p.)
cin >> liczba; // text -> bin
 

stream << liczba; // bin -> text
 
... 
 
int nowaLiczba1 = std::stoi(newLiczba);  // text -> bin
cout << "To jest odwrot int " << nowaLiczba1 << endl;  // bin -> text

Nie za dużo tych konwersji? Jeśli główny algorytm operuje na tekście, to te konwersje na/z int są zbędne.

Podobne pytania

0 głosów
2 odpowiedzi 1,088 wizyt
pytanie zadane 27 października 2019 w C i C++ przez nomihiyer Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 2,816 wizyt
0 głosów
1 odpowiedź 593 wizyt
pytanie zadane 18 czerwca 2021 w C# przez disaster Bywalec (2,120 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...