![](/img/trans.png)
[英]How to make a hex to decimal converter without using the functions for it in 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.