gpt4 book ai didi

c++ - 如何在 C++ 中定义新的数字系统

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

本质上,我试图做的是在 C++ 中创建一个以 62 为基数的数字系统(一个字母数字数字系统——一个包括 a-z、A-Z 和 0-9 的数字系统)。这样的事情将如何完成?我尝试使用这样的字符数组:

const char alphaNum[62] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l ', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K ', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

但是编写函数来使用该数组并尝试计数需要太多代码而不实用(对于 0 到 61,当然,只需从数组中选择它。当您尝试做多位数时就会出现问题,即 00)。只说 foobar++; 会简单得多。有没有人有办法定义数字系统,或者至少有办法让我做到这一点,这样我就不必在每次到达 Z 时都写一个案例?

编辑:它应该是 const char,不知道为什么 VS 决定不复制其中的一些会很有趣。

最佳答案

您需要将外部(对用户)表示和内部表示分开。

内部表示
在计算机内部,您应该使用最有效的表示。这可以是十六进制、二进制或十进制;或者不用担心。

向用户展示时,您应该使用外部表示。

外部代表
您的字符数组代表您的数字系统的数字。 (它也应该是 const 。)您需要将数字与内部表示隔离开来。例如,在 16 进制中,我们将数字除以 16 以将数字右移,然后使用 modulo 除法得到余数。余数是数字值。使用余数从数组中查找数字表示。

在较小的基数上尝试您的算法,例如 17 或 18。扩展到基数 62 应该是更改 #define 的问题。或 const integer .

编辑 1:困难的方法
一种更困难的方法是为数字系统的每个数字使用一个字节。字节、八位字节或无符号字符的范围为 0 到 255,因此应容纳基数为 62 的数字。

使用 std::vector<unsigned char>代表你的号码。您必须决定最高有效位是在 vector 的前面还是在末尾。

增加一个数字:

  add 1 to digit.
if digit value > 62
{
set digit to zero.
Load digit with next greater column value (i.e. vector[position + 1];
Repeat at top of algorithm
}

这是标准算法,不考虑基数(10、8、16 等)。
十进制加减乘除的基本规则仍然适用。 (提示)。

这是 Big Number 库中使用的技术。

关于c++ - 如何在 C++ 中定义新的数字系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24224168/

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