C++作业求助,编程实现:二、八、十、十六进制间相互转化

输入任意一个进制的数,输出其它三种进制的数。

输入:十进制68.3125

输出:二进制:1000100.0101

八进制:104.24

十六进制:44.5

反之输入:

输入:二进制:1000100.0101

输出:十进制68.3125

八进制:104.24

十六进制:44.5

十六进制和小数部分太让人头痛了

https://blog.csdn.net/weixin_44251129/article/details/88541624 原理
https://www.wendangwang.com/doc/ead0ea9875d5e76aa7dbcdbd 代码

以下是一个简单的 C++ 程序,用于将二进制、八进制、十进制和十六进制字符串相互转换:

#include <iostream>
#include <cstdlib>
#include <sstream>

using namespace std;

string toBinary(int n) {
    string bin = "";
    while (n) {
        bin += n % 2 ? "1" : "0";
        n /= 2;
    }
    reverse(bin.begin(), bin.end());
    return bin;
}

string toOctal(int n) {
    string oct = "";
    while (n) {
        oct = to_string(n % 8) + oct;
        n /= 8;
    }
    return oct;
}

string toDecimalString(int n) {
    return to_string(n);
}

string toHex(int n) {
    stringstream ss;
    ss << uppercase << hex << n;
    return ss.str();
}

int toDecimal(string s, int base) {
    int dec = 0;
    int x = 1;
    for (int i = s.length() - 1; i >= 0; i--) {
        int c = base == 16 && isalpha(s[i]) ? toupper(s[i]) - 'A' + 10 : (s[i] - '0');
        dec += c * x;
        x *= base;
    }
    return dec;
}

int main() {
    cout << "Enter a number: ";
    string num;
    cin >> num;

    int base = 0;
    while (base != 2 && base != 8 && base != 10 && base != 16) {
        cout << "Enter base (2, 8, 10, or 16): ";
        cin >> base;
    }

    int dec = toDecimal(num, base);
    cout << "Decimal: " << dec << endl
        << "Binary: " << toBinary(dec) << endl
        << "Octal: " << toOctal(dec) << endl
        << "Hexadecimal: " << toHex(dec) << endl;

    return 0;
}