[英]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.