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

Zamiana liczby z systemu dziesiętnego na szesnastkowy- odwracanie liczby

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
3,413 wizyt
pytanie zadane 22 października 2017 w C i C++ przez dorota17 Nowicjusz (160 p.)
edycja 22 października 2017 przez Patrycjerz

Witam, jak odwrócić liczbę? Np. dla 349 wychodzi mi D51 a musi być 15D. Myślałam nad tym żeby te pojedyncze litery, które są wypisywanie z pętli czyli D,5,1 zapisać jako jedną liczbę ale nie wiem jak. Proszę o pomoc.

#include <iostream>
#include <math.h>

using namespace std;
int a,r;

int main()
{

    cout << "Podaj liczbe w systemie dziesietnym" << endl;
    cin>>a;


  while(a>0)
  {
      r=a%16;
    /*   cout<<r<<"   ";     */

       a=round(a/16);


        if(r==10)
            cout<<"A";
        else  if(r==11)
            cout<<"B";
        else      if(r==12)
            cout<<"C";
          else    if(r==13)
            cout<<"D";
          else    if(r==14)
            cout<<"E";
          else    if(r==15)
            cout<<"F";

            else
                cout<<r;




  }



    return 0;
}

2 odpowiedzi

0 głosów
odpowiedź 22 października 2017 przez Patrycjerz Mędrzec (192,320 p.)

Cyfry musisz magazynować, aby później móc je wypisać na odwrót. Możesz to zrobić m.in. za pomocą vectora typu char i iteratora rewersyjnego.

std::vector<char> cyfry;

// ...

if (r == 10)
  cyfry.push_back('A');
else if (r == 11)
  cyfry.push_back('B');
else if (r == 12)
  cyfry.push_back('C');
else if (r == 13)
  cyfry.push_back('D');
else if (r == 14)
  cyfry.push_back('E');
else if (r == 15)
  cyfry.push_back('F');

else
  cyfry.push_back(r + 48);

// ...

for (std::vector<char>::reverse_iterator rit = cyfry.rbegin(); rit != cyfry.rend(); rit++)
  std::cout << *rit;
komentarz 22 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Można też użyć funkcji std::reverse(), a następnie wyświetlić wszystkie elementy wektora.
komentarz 22 października 2017 przez Patrycjerz Mędrzec (192,320 p.)
Funkcja ciekawa, lecz nie sądzę, aby odwracanie kontenera było w tej sytuacji potrzebne. Zwiększa to jedynie ilość poleceń bez współmiernej korzyści (czyt. dostęp od początku, a nie od końca). Przecież vector istnieje tylko w kontekście wypisania jego elementów na ekran, więc zmiana jego zawartości nie ma większego sensu.
0 głosów
odpowiedź 22 października 2017 przez bimbrownik Mądrala (5,180 p.)

Zamiast wyświetlać znaki przy każdym obiegu pętli, stwórz zmienną typu string i zapisuj te znaki do niej, a kiedy skończysz już obliczanie całej liczby, wyświetl znaki z tego stringa od końca, przykładowo tak:

for(int i = text.length()-1; i >= 0; i--)
{
    cout << text[i] << endl;
}

Edit: pisząc to, nie widziałem posta wyżej, ale gdybyś nie rozumiała tamtego sposobu, to ten jest raczej prostszy, choć pomysł ten sam.

komentarz 22 października 2017 przez dorota17 Nowicjusz (160 p.)
Zamiast wyświetlać znaki przy każdym obiegu pętli, stwórz zmienną typu string i zapisuj te znaki .        

 

Zamienić int a,r; na string a,r; ?

Nadal będą pojedyncze znaki. Jak mam je zapisać? Jak uzyskać  text  ze wszystkimi znakami jako jeden wyraz ?
komentarz 23 października 2017 przez bimbrownik Mądrala (5,180 p.)

Zrobiłbym to tak:

#include <iostream>
#include <string> //nie zapomnij o dołączeniu biblioteki string

using namespace std;
int a, r;

int main()
{

	cout << "Podaj liczbe w systemie dziesietnym" << endl;
	cin >> a;
	string hex = ""; //do tej zmiennej będziemy zapisywać kolejne znaki

	while (a>0)
	{
		r = a % 16;
		a /= 16; //nie potrzeba funkcji round(), ponieważ a jest typu całkowitego i nie zapisywane są cyfry po przecinku
				//dlatego też nie potrzeba biblioteki math.h

		if (r == 10)
			hex += 'A';
		else  if (r == 11)
			hex += 'B';
		else      if (r == 12)
			hex += 'C';
		else    if (r == 13)
			hex += 'D';
		else    if (r == 14)
			hex += 'E';
		else    if (r == 15)
			hex += 'F';

		else
			hex += to_string(r); //konwersja zmiennej r z typu int na string


	}

	for (int i = hex.length()-1; i >= 0; i--) //wypisanie kolejno od tyłu zawartości zmiennej hex
	{
		cout << hex[i];
	}

	return 0;
}

Nie ma potrzeby zmiany a i r na string, bo nie będzie można wykonywać na nich obliczeń, zamiast tego lepiej stworzyć nową zmienną typu string i do niej to zapisywać. 

Podobne pytania

0 głosów
1 odpowiedź 1,602 wizyt
0 głosów
2 odpowiedzi 1,535 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 575 wizyt

93,191 zapytań

142,206 odpowiedzi

322,041 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. 2584p. - Adrian Wieprzkowicz
  9. 2536p. - Mikbac
  10. 2485p. - Marcin Putra
  11. 2418p. - Michal Drewniak
  12. 2239p. - Michał Telesz
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
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!

...