我的代码中有什么错误?

abh*_*net 2 c++

我正在解决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)

答案仍然是一样的.

Chr*_*ger 5

由于您使用的是双打,我的猜测是您获得的重复数字在双重表示中并不完全相同(因此它们占据了地图中的不同条目).尝试创建索引整数的映射.

  • 您还可以使用自己的比较功能创建双打地图,您可以在其中考虑双打之间的微小差异. (4认同)