如题,这道题的 subtask 3,求的是 πn,但是我使用 ida pro 打开后,伪代码如下:
int D::Do()
{
int v1;
int v2;
_TBYTE v3;
scanf("%d", &v1);
if ( pre && (v1 <= 0 || v1 > 50000) )
return puts("invalid input.");
*(double *)&v3 = sqrtl((double)v1 / -8.87960937049345e43);
v2 = (int)floorl(*(long double *)&v3);
return printf("%d\n", v2);
}
可以发现,π 应该在的地方变成了 -8.87960937049345e43。
除完之后会变成负数,自然不能开平方,所以按照伪代码看,这段程序无法运行。
然后我运行了 lost.exe,发现他正确给出了结果。
然后我就打开了 GDB 硬调,发现执行完这一句之后,v1 确实被除了 π。
然后给我整不明白了,是浮点数存储的原因呢,还是 ida pro 出问题了呢