我正在用C++实现BigInt的实现,并且很难弄清楚如何创建从(到)字符串的转换器(C字符串现在就足够了)。

我将数字实现为无符号int数组(因此,基本上将位块彼此相邻放置)。我只是不知道如何将字符串转换为此表示形式。

例如,如果usigned int为32b,而我得到的字符串为“4294967296”或“5000000000”,或者基本上大于32b int可以容纳的值,我如何将其正确转换为合适的二进制表示形式?

我知道我缺少明显的东西,而我只是要求向正确的方向发展。感谢您的帮助,也很抱歉提出这样一个愚蠢的问题!

最佳答案

一种方法(不一定是最有效的方法)是实现通常的算术运算符,然后执行以下操作:

// (pseudo-code)
// String to BigInt

String s = ...;
BigInt x = 0;

while (!s.empty())
{
    x *= 10;
    x += s[0] - '0';
    s.pop_front();
}

Output(x);

// (pseudo-code)
// BigInt to String

BigInt x = ...;
String s;

while (x > 0)
{
    s += '0' + x % 10;
    x /= 10;
}

Reverse(s);
Output(s);

如果您想做一些比您更棘手的事情,可以尝试以下方法:
  • 如果输入I
  • 通过位长* 3/10估算I的D位数字。
  • Mod并除以因子F = 10 ^(D / 2),得到I = X * F + Y;
  • 以I = X和I = Y递归执行
  • 关于c++ - BigInt实现-将字符串转换为以unsigned int存储的二进制表示形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9833112/

    10-13 08:31