Konwerter liczb

0

Napisz program, który wczyta ze standardowego wejścia ciąg liczb zapisanych w systemach dziesiętnym, ósemkowym (z wiodącym "0") lub szesnastkowym (wiodące '0x'). Dla każdej wczytanej liczby program powinien wydrukować ją we wszystkich trzech możliwych reprezentacjach w porządku: ósemkowa, dziesiętna, szesnastkowa.

Przykładowe wejście:
012
0xCC
37

Przykładowe wyjście:
012 10 0xA
0314 204 0xCC
045 37 0x25

Udalo mi się wykombinować coś takiego (coś nie tak jest z typami danych w funkcjach):

#include <iostream>
#include <cstdlib>
#include <string>
 
using namespace std;
 
int hex2dec (string heksadecymalna)
{
    int dziesietna = strtol(heksadecymalna.c_str(), NULL, 16);
 
    return dziesietna;
}
 
string dec2hex (int dziesietna)
{
    char heksadecymalna[255];
    itoa(dziesietna, heksadecymalna, 16);
 
    return (string)heksadecymalna;
}
 
int oct2dec (string osemkowa)
{
    int dziesietna = strtol(osemkowa.c_str(), NULL, 8);
 
    return dziesietna;
}
 
int dec2oct (int dziesietna)
{
    char osemkowa[255];
    itoa(dziesietna, osemkowa, 8);
 
    return (int)osemkowa;
}
 
int oct2hex (int osemkowa)
{
    int osemkowa = strtol(osemkowa.c_str(), NULL, 16);
 
    return osemkowa;
}
 
string hex2oct (string heksad)
{
    int heksad = strtol(heksad.c_str(), NULL, 8);
 
    return heksad;
}
int main()
{
    int liczba;
    string liczba8;
    string liczbahex;
 
    cin >> liczba8 ;
    cin >> liczbahex;
    cin >> liczba;
 
    cout << liczba8 << " ";
    cout << oct2dec(liczba8) << " ";
    cout << oct2hex(liczba8) << endl;
 
 
 
    cout << hex2oct(liczbahex) << " ";
    cout << hex2dec(liczbahex) << " ";
    cout << liczbahex << endl;
 
 
 
 
    cout << dec2oct(liczba) << " ";
    cout << liczba << " ";
    cout << dec2hex(liczba) << endl;
 
 
    return 0;
}
0

Tutaj: https://4programmers.net/Forum/C_i_C++/299314-zmiana_liczby_na_cyfry?p=1417798#id1417798 jest "ręczne" konwertowanie z dziesiętnego na dowolny. To już blisko tego co Chcesz, Twoja funkcja musiałaby jeszcze konwertować z binarnego i ósemkowego na dziesiętny i przekazywać do tej.

2

Można to łatwo osiągnąć przy pomocy std::cin.unsetf()

1

Nie ma co nadmiernie kombinować:

int n;
std::cin.unsetf(std::ios::dec);
std::cin.unsetf(std::ios::hex);
std::cin.unsetf(std::ios::oct);
while(std::cin >> n) {
    std::cout << '0' << std::oct << n << ' ' << std::dec << n << " 0x" << std::hex << n << '\n';
}

https://wandbox.org/permlink/Pfj02Xv3LYqbhgJx

2
#include <iostream>
#include <iomanip>

int main()
{
    int n;
    std::cin.unsetf(std::ios::basefield);
    std::cout.setf(std::ios::showbase);
    while(std::cin >> n) {
        std::cout << std::oct << n << ' ' << std::dec << n << ' ' << std::hex << n << '\n';
    }
}

:P
https://wandbox.org/permlink/gjbmfNMO9Ry1BGZk

1 użytkowników online, w tym zalogowanych: 0, gości: 1