大整数运算

时间:2012-09-02 09:06:14

标签: .net visual-c++ c++-cli biginteger

我编写了简单的C ++ / CLI代码来计算大整数运算的结果,但它失败了警告警告C4307: '*' : integral constant overflow,这是我的代码:

int main(array<System::String ^> ^args)
{
    String^ number = gcnew String((wchar_t *)(28433 * (2 ^ 7830457) + 1));

    Console::WriteLine(number);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

2 ^ 7830457需要7830457位才能存储。一个数字大约1MB! 您应该从学习变量类型和它们可以处理的值开始。你真的需要这个数字的确切整数值吗?你真的需要展示它吗?这个数字是数百万字符长。

你不能使用带有这些数字的常规* / - + ^运算符,你需要一个任意大数的数学库。而且我担心它甚至不会处理如此庞大的数字。 How to handle arbitrarily large integers

答案 1 :(得分:1)

您的代码中存在许多基本的误解:

  1. 你不是在任何地方使用大整数
  2. ^是xor,而不是取幂。
  3. 您正在将该整数转换为指针,这是一种无意义的操作
  4. 您应该使用System.Numerics中的BigInteger struct。不要忘记首先将程序集引用添加到System.Numerics.dll