0

大きな整数演算の結果を計算するための単純な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;
}
4

2 に答える 2

1

2 ^ 7830457は、格納するために7830457ビットを必要とします。1つの番号だけで約1MB!
まず、変数の型とそれらが処理できる値を学習する必要があります。この数値に正確な整数値が本当に必要ですか?本当に表示する必要がありますか?このアンバーは数百万文字の長さです。

このような数では通常の*/-+^演算子を使用できません。任意の多数の数学ライブラリが必要です。そして、私はそれがそのような多数を処理することさえできないのではないかと心配しています。 任意の大きさの整数を処理する方法

于 2012-09-02T09:24:41.227 に答える
1

コードにはいくつかの根本的な誤解があります。

  1. どこにも大きな整数を使用していません
  2. ^xorであり、べき乗ではありません。
  3. その整数をポインタにキャストしていますが、これは意味のない操作です

からのBigInteger構造体を使用する必要がありますSystem.Numerics。最初にアセンブリ参照を追加することを忘れないでくださいSystem.Numerics.dll

于 2012-09-02T10:44:09.027 に答える