Konwerter liczb

Odpowiedz Nowy wątek
2019-03-15 01:18
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;
}
edytowany 1x, ostatnio: kq, 2019-03-15 10:17

Pozostało 580 znaków

2019-03-15 02:01
0

Tutaj: Zmiana liczby na cyfry. 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.


Pozostało 580 znaków

2019-03-15 03:00
2

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

Pozostało 580 znaków

2019-03-15 10:30
kq
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


std::cin.unsetf(std::ios::basefield); - MarekR22 2019-03-15 10:54

Pozostało 580 znaków

2019-03-15 11:00
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


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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