• 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

0 głosów
3,722 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,753 wizyt
0 głosów
2 odpowiedzi 1,776 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 695 wizyt

93,633 zapytań

142,558 odpowiedzi

323,058 komentarzy

63,142 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
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

Kursy INF.02 i INF.03
...