尝试编写一个程序,将十进制数转换为实现递归的十六进制数。
无法使用
之类的内容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。
这是一项学校作业。我真的应该尝试修改吗?或者我应该在功能之后翻转它?
答案 0 :(得分:0)
您的基本情况应该是num
为0时的情况。现在,无论num
是什么,您都会返回ss.str()
。我想补充一点:
if(!num) return ss.str();
删除其他return ss.str()
。
答案 1 :(得分:0)
它会向后打印,因为这是您在递归中定义的内容:)
基本上它应该是这样的:
(伪代码)
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);
}
答案 2 :(得分:-1)
这是我的代码。
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);
}