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

Odwacanie kolejności cyfr w liczbie

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
5,957 wizyt
pytanie zadane 2 sierpnia 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)
Witam robię zadanie w którym należy odwrócić kolejność cyfr w liczbie np. 699<--->996. Czy istnieje jakaś metoda która rozwiązałaby mój problem?

2 odpowiedzi

+1 głos
odpowiedź 2 sierpnia 2018 przez profesorek96 Szeryf (91,420 p.)
Tak istnieje metoda w znaczeniu sposób. Są nawet dwa jeden to przyjąć liczbę jako string i go odwrotnie wypisać cy przepisać do innego stringa a drugaa to z modulo 10 jednak tutaj musisz zwrócić uwagę na znak 0.
komentarz 2 sierpnia 2018 przez Nowacx02 Obywatel (1,060 p.)
Podałbyś przykład z tym modulo?
komentarz 2 sierpnia 2018 przez Nowacx02 Obywatel (1,060 p.)
bump
1
komentarz 2 sierpnia 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 2 sierpnia 2018 przez Eryk Andrzejewski

Z tym modulo to na szybko napisałem w taki sposób:

#include <iostream>

int main()
{
	unsigned number = 1234567;
	unsigned base = 10;

	do
	{
		std::cout << number % base;
		number /= base;
	} while (number);
}

Działa to tak, że operacja modulo % baza systemu liczbowego (w naszym przypadku system dziesiętny, więc bazą jest 10) zwraca ostatnią cyfrę liczby. Następnie dzielę daną liczbę przez 10, by pozbyć się ostatniej cyfry (a część ułamkowa wyniku "przepada", ponieważ operujemy na zmiennej typu całkowitego). Pętla wykonuje się dopóki nasza liczba nie będzie zerem (a jeśli będzie zerem, to znaczy że nie ma już żadnych innych cyfr do wypisania).

komentarz 2 sierpnia 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Ze stringiem będzie to natomiast wyglądało tak:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
	int number = 1234567;
	std::string number_as_string = std::to_string(number);
	std::reverse(number_as_string.begin(), number_as_string.end());

	std::cout << number_as_string;
}

Konwertujemy liczbę do łańcucha znaków (std::string). Następnie korzystamy z funkcji, która odwraca elementy łańcucha (znaki) kolejnością. Na końcu wypisujemy odwróconą liczbę.

Można też zamiast korzystać z tej funkcji odwracającej po prostu wypisać sobie przy pomocy pętli, znak po znaku - ale od końca (począwszy od ostatniego elementu, skończywszy na pierwszym).

0 głosów
odpowiedź 2 sierpnia 2018 przez mokrowski Mędrzec (156,260 p.)

Nie wiem w jakim celu ta konwersja do string. Jedyne usprawiedliwienie to potencjalne zachowanie zera wiodącego (które było ostatnie). Ale pytanie było jasne o cyfry w liczbie:

#include <iostream>

unsigned revValue(unsigned value) {
    unsigned base = 10;
    unsigned result = 0;
    while(value != 0) {
        result = result * base + value % base;
        value /= base;
    }
    return result;
}

unsigned revValueRec(unsigned value, unsigned v = 0) {
    return value != 0 ? revValueRec(value / 10, v * 10 + value % 10) : v;
}

int main() {
    unsigned value = 912913;
    std::cout << revValue(value) << '\n';
    std::cout << revValueRec(value) << '\n';
}

BTW: Oczywiście sprawdzanie warunku value != 0 wydaje się trochę zachowawcze ale niech już będzie "edukacyjnie".

Podobne pytania

0 głosów
2 odpowiedzi 263 wizyt
pytanie zadane 30 listopada 2023 w C i C++ przez maxkolanko1998 Gaduła (3,230 p.)
0 głosów
3 odpowiedzi 1,886 wizyt
0 głosów
4 odpowiedzi 28,993 wizyt
pytanie zadane 3 września 2015 w C i C++ przez karmar435 Nowicjusz (240 p.)

93,106 zapytań

142,082 odpowiedzi

321,603 komentarzy

62,447 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

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!

...