• 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

Object Storage Arubacloud
0 głosów
2,983 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,529 wizyt
0 głosów
2 odpowiedzi 1,278 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 495 wizyt

92,568 zapytań

141,420 odpowiedzi

319,618 komentarzy

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

...