gpt4 book ai didi

algorithm - 将字符串转换为整数(不是 atoi!)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:06 27 4
gpt4 key购买 nike

我希望能够将一个字符指针作为输入,该指针指向以 2 为基数到 16 的数字,作为第二个参数,该数字位于哪个基数,然后将其转换为以 2 为基数的表示形式。整数可以是任意长度。我的解决方案现在完成了 atoi() 函数的功能,但我纯粹出于学术兴趣好奇是否可以使用查找表解决方案。

我发现这对于二进制、八进制和十六进制来说很简单。我可以简单地使用每个数字的查找表来获取一系列位。例如:

0xF1E ---> (F = 1111) (1 = 0001) (E = 1110) ---> 111100011110

0766 ---> (7 = 111) (6 = 110) (6 = 110) ---> 111110110

1000 ---> ??? ---> 1111101000

但是,我的问题是我想对奇数基数执行此查找表方法,例如基数 10。我知道我可以像 atoi 那样编写算法并执行大量乘法和加法,但对于这个特定的问题 我正在尝试查看是否可以使用查找表来完成。不过,以 10 为底数绝对不是那么明显。我很好奇是否有人有任何巧妙的方法来弄清楚如何为 Base X -> Base 2 生成通用查找表。我知道对于 Base 10,你不能一次只给它一个数字,所以解决方案可能必须一次查找一组数字。

我知道乘法和加法的解决方案,但由于这些是任意长度的数字,乘法和加法运算不是免费的,所以我想尽可能避免它们。

最佳答案

您将必须使用输入宽度为 m 的查找表,基数 b 符号返回 n 位,以便

n = log2(b) * m

对于正整数 bnm。因此,如果 b 不是 2 的幂,将没有(简单的)查找表解决方案。

我认为没有解决方案。以下以 10 为基数的示例说明了原因。

65536 = 1 0000 0000 0000 0000

将最后一位数字从 6 更改为 5 将翻转所有位。

65535 = 0 1111 1111 1111 1111

如果您从末尾开始处理输入,则几乎相同。将第一个数字从 6 更改为 5 会翻转大量位。

55535 = 0 1101 1000 1111 0000

关于algorithm - 将字符串转换为整数(不是 atoi!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com