9

C++で任意のサイズの整数を2つ追加したいと思います。どうすればこれを行うことができますか?

4

3 に答える 3

15

これは、任意精度の演算にOpenSSLbignum実装を使用する方法を示す例です。私の例では264 + 265を実行します。Linuxを使用しています。

#include <cstdio>
#include <openssl/crypto.h>
#include <openssl/bn.h>

int main(int argc, char *argv[])
{
        static const char num1[] = "18446744073709551616";
        static const char num2[] = "36893488147419103232";

        BIGNUM *bn1 = NULL;
        BIGNUM *bn2 = NULL;

        BN_CTX *ctx = BN_CTX_new();

        BN_dec2bn(&bn1, num1); // convert the string to BIGNUM
        BN_dec2bn(&bn2, num2);

        BN_add(bn1, bn1, bn2); // bn1 = bn1 + bn2

        char *result_str = BN_bn2dec(bn1);  // convert the BIGNUM back to string
        printf("%s + %s = %s\n", num1, num2, result_str);
        OPENSSL_free(result_str);

        BN_free(bn1);
        BN_free(bn2);
        BN_CTX_free(ctx);

        return 0;
}

次の出力が生成されます。

18446744073709551616 + 36893488147419103232 = 55340232221128654848

開発ライブラリとともにOpenSSLをインストールする必要があります。Linuxを使用している場合は、パッケージマネージャーから開発ライブラリをインストールし、とリンクしlibcrypto.soます。

g++ bignum.cpp -o bignum -lcrypto

または、OpenSSLソースをダウンロードして静的ライブラリを構築し、静的libcrypto.aにリンクします。

g++ bignum.cpp -o bignum -I./openssl-1.0.0/include ./openssl-1.0.0/libcrypto.a

Windowsでは、 OpenSSLのWindowsポートからインストールする必要があります。

于 2010-05-28T03:34:08.113 に答える
4

+演算子を使用しますか?

于 2010-05-28T01:58:34.750 に答える