1

演習のために1年間ブルートフォースする必要があります。コンパイラはこのエラーをスローし続けます:

bruteforceJS12.cpp:8:28: 警告: 整数定数がその型に対して大きすぎます [デフォルトで有効]

私のコードは次のとおりです。

#include <iostream>

using namespace std;

int main(){

    unsigned long long year(0);
    unsigned long long result(318338237039211050000);
    unsigned long long pass(1337);

    while (pass != result)
    {
    for (unsigned long long i = 1; i<= year; i++)
        {

        pass += year * i * year;

        }

        cout << "pass not cracked with year = " << year << endl;
        ++year;

    }

        cout << "pass cracked with year = " << year << endl;
}

私はすでに試したことに注意してくださいunsigned long long result(318338237039211050000ULL);

私はgccバージョン4.8.1を使用しています

編集:

InfInt ライブラリを使用した修正版は次のとおりですhttp://code.google.com/p/infint/

#include <iostream>
#include "InfInt.h"

using namespace std;

int main(){

    InfInt year = "113";
    InfInt result = "318338237039211050000";
    InfInt pass= "1337";

    while (pass != result)
    {
    for (InfInt i = 1; i<= year; i++)
        {

        pass += year * i * year;

        }

        cout << "year = " << year << "  pass = " << pass <<  endl;
        ++year;

    }

        cout << "pass cracked with year = " << year << endl;
}
4

2 に答える 2

3

システムの数値制限を把握する簡単な方法は、std::numeric_limitsを使用することです。次のコードを実行したときのシステムの出力:

#include <iostream>
#include <limits>

int main()
{   
     std::cout << "ull\t"
              << std::numeric_limits<unsigned long long>::lowest() << '\t'
              << std::numeric_limits<unsigned long long>::max() << std::endl ;
}

は:

ull 0   18446744073709551615

最大値がリテラル値よりも明らかに小さいことがわかります。

 18446744073709551615
 318338237039211050000

したがって、整数リテラルはunsigned long long型には大きすぎます。

于 2013-10-31T20:20:46.260 に答える
1

あなたの問題は単にそれ318338237039211050000ULLが範囲外であることです。

64 ビット型であると仮定すると、64 ビット値は log10( 2 64 -1) 10 進数 (つまり、19 桁の値すべてと下位 20 桁の値) に適して318338237039211050000ullおり、21 桁あります。2 64 -1 ( 18446744073709551615ull) が最大値です。

値 318338237039211050000 には、少なくとも log10(318338237039211050000)/log10(2) ビットが必要です。それが69ビットです。

于 2013-10-31T20:21:02.050 に答える