簡體   English   中英

使用遞歸的十進制到十六進制轉換器(C ++)

[英]Decimal to Hex converter using Recursion (C++)

嘗試編寫將十進制數轉換為實現遞歸的十六進制數的程序。

不能使用類似

cout << hex << x << endl; 

需要知道如何手動編寫函數。

我嘗試了一下,但沒有真正起作用:

輸入是用戶輸入的整數,並且ss在此函數之前不包含任何內容。

string convertHex(int num, ostringstream &ss)
{

    int x = num % 16;

    switch (x)
    {
        case 10: ss << "A"; return ss.str(); break;
        case 11: ss << "B"; return ss.str(); break;
        case 12: ss << "C"; return ss.str(); break;
        case 13: ss << "D"; return ss.str(); break;
        case 14: ss << "E"; return ss.str(); break;
        case 15: ss << "F"; return ss.str(); break;
        default: ss <<   x; return ss.str(); break;
    }

    return convertHex(num / 16, ss);

}

不知道我是否完全理解如何從十進制轉換為十六進制,但是讓我煩惱的是使它與遞歸一起使用。 有任何想法嗎?

編輯:

我添加了awesomeyi建議的if語句,並在切換中取出了返回值,現在它可以工作了……但實際上不是。 這是新的代碼:

string convertHex(int num, ostringstream &ss)
{

    int x = num % 16;

    if (num == 0)
    {
        ss << 0;
        return ss.str();
    }

    switch (x)
    {
        case 10: ss << "A";  break;
        case 11: ss << "B";  break;
        case 12: ss << "C";  break;
        case 13: ss << "D";  break;
        case 14: ss << "E";  break;
        case 15: ss << "F";  break;
        default: ss << x;    break;
    }

    return convertHex(num / 16, ss);

}

它可以工作,但是輸出是向后的,並且在其末尾添加零。 如果我將十進制的16轉換為十六進制,它將給我010。如果給它更大的數字(如4598),它將給我6F110。 4598的正確十六進制值為11F6。

這是用於學校作業。 我是否應該嘗試對此進行修改? 還是應該在功能結束后翻轉一下?

您的基本情況應該是num為0時。現在,無論num是多少,您都將返回ss.str() 我將添加以下內容:

if(!num) return ss.str();

並刪除其他return ss.str()

它向后打印,因為這就是您在遞歸中定義的內容:)

基本上應該看起來像這樣:

(偽代碼)

printHex(int i) {
    if i == 0 {
        // do nothing
        return;
    }

    printHex( i / 16);
    print out hex value of i %16
}

如果要返回一個字符串,類似地,它應該類似於:

(偽代碼)

string toHex(int i) {
    if (i == 0)  {
        return "";
    }

    return toHex(i/16) + convertToHex( i % 16);
}

這是我的代碼。

string convertDecToHex(int decimalNumber, string buffer)
{
    int x = decimalNumber % 16;
    char x_to_char = x + '0';
    if (decimalNumber == 0)
    {
        return buffer;
    }
    switch (x)
    {
    case 10: buffer = 'A' + buffer; break;
    case 11: buffer = 'B' + buffer; break;
    case 12: buffer = 'C' + buffer; break;
    case 13: buffer = 'D' + buffer; break;
    case 14: buffer = 'E' + buffer; break;
    case 15: buffer = 'F' + buffer; break;
    default: buffer = x_to_char + buffer;
    }
    return convertDecToHex(decimalNumber / 16, buffer);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM