如何递归地将十六进制转换为十进制[关闭]
Posted
技术标签:
【中文标题】如何递归地将十六进制转换为十进制[关闭]【英文标题】:How to convert hexadecimal to decimal recursively [closed] 【发布时间】:2019-11-07 20:38:40 【问题描述】:我需要进行此转换,但不知道。有人能帮我吗?我需要这个来完成一个基本转换的计算器。我还需要该函数返回一个整数来转换以在我的其他函数中使用。
PS:对不起,我的英语不好。
我希望 11F 是整数 287。
【问题讨论】:
您对“递归”有什么期望?你都尝试了些什么?您是否查看过诸如 How to convert Hexadecimal to Decimal? 或 Converting Hexadecimal to Decimal 之类的现有问题以了解如何操作? Converting Hexadecimal to Decimal的可能重复 【参考方案1】:这里有一些递归:
int hexToBase10(const std::string& number, size_t pos = 0)
if (pos == number.length())
return 0;
char digit = number[number.size() - pos - 1];
int add = digit >= '0' && digit <= '9' ? digit - '0'
: digit - 'A' + 10;
return 16 * hexToBase10(number, pos + 1) + add;
这样称呼:
hexToBase10("11F"); // 287
顺便说一句,使用std::hex
似乎更安全。
【讨论】:
您应该注意:十六进制字符串不能包含前缀"0x"
或"0X"
,并且十六进制字符必须是大写的(您可以解决后者通过包含<cctype>
并在您的函数中使用std::tolower()
)。您可以在调用者中或在使用.find()
来检查'x'
或'X'
的函数的包装器中寻址前者,并超越前缀。 (例如尝试转换"11f"
或"0x11F"
)也就是说,您确实回答了问题的“递归”方面。【参考方案2】:
如果它最多适合 unsigned long long
,您可以使用 stdlib.h 中的 strtoul
/strtoull
将其从 base-16 字符串解析为整数。
然后您可以简单地打印以 10 为底的整数。
#include <stdlib.h>
#include <stdio.h>
int main()
char const *hex = "11F";
char *endptr;
unsigned long ul = strtoul(hex,&endptr,16);
printf("%lu\n", ul);
【讨论】:
这里唯一的问题是缺少递归,这是我无法想象的要求。 可能是让学生熟悉这个概念的课堂作业。以上是关于如何递归地将十六进制转换为十进制[关闭]的主要内容,如果未能解决你的问题,请参考以下文章