【发布时间】:2013-10-31 20:13:29
【问题描述】:
我需要暴力破解一年的练习。编译器不断抛出这个错误:
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;
}
【问题讨论】:
-
你应该使用 ASCII 表示。
-
它是否因
unsigned long long result = 318338237039211050000ULL;而失败?可能只是它不喜欢那个初始化方法? -
` 警告:整数常量对于它的类型来说太大了` ...它不能存储在无符号长长变量中。就是这样。
-
使用
std::numeric_limits<unsigned long long>::max()查看您的问题。 318338237039211050000 明显大于 18446744073709551615。 -
int128_t应该足够大,如果您可以访问该类型。 69 bits required