-2

https://mattmccutchen.net/bigint/をインストールしようとしましたが、すべての .hh ファイルを含めても、BigIntegers を使用すると未定義の参照エラーがスローされます。

[Linker error] undefined reference to `BigInteger::BigInteger(int)'
[Linker error] undefined reference to BigInteger::divideWithRemainder(BigInteger const&, BigInteger&)

私は DevCPP を使用していますが、これから切り替えたくありません (DevCPP 以外のものが機能するのは頭痛の種でした)。私も GMP を試しましたが、それは不必要に混乱を招き、どちらも機能させることができませんでした。

付属のファイルをコンパイルしようと.ccすると、すべて同じリンカ エラーが発生します。

4

1 に答える 1

2

DevCPP の仕組みはわかりませんが、Matt のライブラリからファイルをコピーして、コード ( ?) ファイル.cと同じフォルダーに配置する必要があります。.cpp次に、すべてのコードをコンパイルするのと同じ方法で、それらのファイルをコンパイルする必要があります。それはその問題を解決するはずです。これを行う方法はコンパイラ固有ですが、ここで DevCPP の手順を見つけました: http://www.uniqueness-template.com/devcpp/ どうやら「プロジェクト」を作成してから、自分のコードと彼のコードの両方を追加する必要があります。それに。これは、複数のソース ファイルを使用してプログラムを作成する方法であり、事実上すべてのプログラムを作成するための絶対に不可欠な知識です。

あなたのデモ テスト コードには間違った答えがあり、そのコードは

BigInteger num = 123456789*123456789*123456789; 

これは、整数があり、整数123456789を掛けて(オーバーフローします)、次に123456789整数を掛けて123456789(再びオーバーフローします)、その結果を に変換するためです。明らかに、それは正しくありません。コードはおそらく次のようになります。BigInteger

BigInteger first = 123456789; //yes, you can convert from int to BigInteger
BigInteger second = 123456789;
BigInteger third = 123456789;
BigInteger num = first *second *third; 

int64_tからに変換したいので、念頭に置いて設計されていないためBigInteger、小さなフープをジャンプする必要があります。というわけで変換関数です。BigIntegerint64_t

BigInteger int64_to_BigInt(int64_t v)
{ return BigInteger(int(v/INT_MAX))*INT_MAX+int(v%INT_MAX);}

int64_t BigInt_to_int64(BigInteger v)
{
    BigInteger bottom;
    v.divideWithRemainder(INT_MAX, bottom);
    return int64_t(v.toInt())*INT_MAX + bottom.toUnsignedInt();
}
于 2012-04-09T18:11:16.413 に答える