• 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

VPS Starter Arubacloud
0 głosów
2,917 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,340 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,340 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,524 wizyt
0 głosów
2 odpowiedzi 1,265 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 493 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 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!

...