Untitled

 avatar
unknown
c_cpp
9 months ago
1.6 kB
2
Indexable
#include <iostream>
#include <limits> // For numeric_limits

using namespace std;

void convert(int decimal) {
    if (decimal < 0) {
        cout << "Error: Negative input is not supported." << endl;
        return;
    }

    string binary, octal, hexa;

    while (decimal > 0) {
        // Binary conversion (more efficient with bitwise AND)
        binary = to_string(decimal & 1) + binary;
        decimal >>= 1; // Right shift by 1 (equivalent to division by 2)

        // Octal conversion
        octal = to_string(decimal % 8) + octal;
        decimal /= 8;  // Division by 8

        // Hexadecimal conversion
        int hexcode = decimal % 16;
        if (hexcode >= 10) {
            hexa = (char)(hexcode - 10 + 'A') + hexa; // Use character casting for hex digits
        } else {
            hexa = to_string(hexcode) + hexa;
        }
        decimal /= 16;
    }

    cout << "\nBinary: " << binary;
    cout << "\nOctal: " << octal;
    cout << "\nHexadecimal: " << hexa << endl;
}

int main() {
    int decimal;
    char choice;

    do {
        cout << "Enter decimal number: ";
        if (!(cin >> decimal)) {
            cout << "Invalid input. Please enter a number." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n'); // Clear input buffer
        } else {
            convert(decimal);
            cout << "\n-----------\n";
            cout << "Convert again? [y/n]: ";
            cin >> choice;
        }
    } while (choice == 'y' || choice == 'Y'); // Allow both uppercase and lowercase 'y'

    return 0;
}
Editor is loading...
Leave a Comment