ある人の宿題、Aファイルの第5題

2362 ワード

タイトル:
参照
五、進数変換器(10)
要求:(1)バイナリ、8進数、10進数、16進数を入力できます.
(2)入力した数を残りの進数に変換する.
(3)入出力インタフェースを有する.
簡単な回答:
#include <cstdlib>
#include <iostream>

using namespace std;

string toBinaryString(int num) {
    char buffer[33];
    memset(buffer, 0, 33);
    itoa(num, buffer, 2);
    string result(buffer);
    return result;
}

int fromBinaryString(string& in) {
    int length = in.length();
    int result = 0;
    for (int i = 0; i < length; ++i)
        if ('1' == in[i])
            result |= 1 << (length - i - 1);
    return result;
}

void printNumber(int num) {
    cout << "binary: " << toBinaryString(num) << endl;
    cout << "octal: " << oct << num << endl;
    cout << "decimal: " << dec << num << endl;
    cout << "hexadecimal: " << hex << num << dec << endl;
}

void promptRadix() {
    cout << "Enter a decimal number as radix (2, 8, 10, 16): ";
}

void promptNumber() {
    cout << "Enter a number in the above radix: ";
}

int main () {
    string input;
    int radix;
    int num;
    
    promptRadix();
    getline(cin, input);
    radix = atoi(input.c_str());
    
    switch (radix) {
    case 2:
        promptNumber();
        getline(cin, input);
        num = fromBinaryString(input);
        printNumber(num);
        break;
    case 8:
        promptNumber();
        cin >> oct >> num;
        printNumber(num);
        break;
    case 10:
        promptNumber();
        cin >> dec >> num;
        printNumber(num);
        break;
    case 16:
        promptNumber();
        cin >> hex >> num;
        printNumber(num);
        break;
    default:
        cout << "invalid radix." << endl;
        break;
    }
    
    return 0;
}

今度はもっと怠け者・・・いっそチェックしない=-