【问题标题】:Operation with big integers大整数运算
【发布时间】:2012-09-02 09:06:14
【问题描述】:

我编写了简单的 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;
}

【问题讨论】:

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


    【解决方案1】:

    您的代码中有许多根本性的误解:

    1. 您没有在任何地方使用大整数
    2. ^ 是异或,而不是求幂。
    3. 您将该整数转换为指针,这是一个无意义的操作

    您应该使用System.Numerics 中的BigInteger struct。不要忘记首先将程序集引用添加到System.Numerics.dll

    【讨论】:

      【解决方案2】:

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

      您不能对此类数字使用常规的 */-+^ 运算符,您需要一个任意大数的数学库。而且我担心它甚至无法处理这么大的数字。 How to handle arbitrarily large integers

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多