我正在解决Project Euler问题29.如果地图中不存在,我有一个强力方法只是将所有找到的数字映射为真.我得到的答案是9216,这是不正确的.哪里出错了?我也尝试过使用套装,但它们都是一样的.
int main()
{
map <long double,bool> m;
long double x;
int c=0;
for(int i=2;i<=100;i++)
{
for(int j=2;j<=100;j++)
{
x=pow((long double)i,(long double)j);
if(m.find(x) == m.end())
{
m.insert ( pair<long double,bool>(x,true) );
c++;
cout<<x<<endl;
}
}
}
cout<<c<<endl;
Run Code Online (Sandbox Code Playgroud)
}
编辑:
我改变了这一行
m[x]=true;
Run Code Online (Sandbox Code Playgroud)
至
m.insert ( pair<long double,bool>(x,true) );
Run Code Online (Sandbox Code Playgroud)
答案仍然是一样的.
由于您使用的是双打,我的猜测是您获得的重复数字在双重表示中并不完全相同(因此它们占据了地图中的不同条目).尝试创建索引整数的映射.