
这题不算难,但是有一点坑
放die里看看啥文件,懒得查壳了,看不到函数再去查壳吧
64位elf文件,放ida64,看主要代码
解释一下(i & 1):i与1按位与运算,比如3 & 1 == (二进制)1 1 & 0 1 == 0 1 == 1
4 & 1 == (二进制)1 0 0 & 0 0 1 = 0 0 0 == 0
所以i & 1的作用就是划分奇数偶数
奇数的话就把p[i]左移三位,偶数的话就p[i]*i
exp:
#include <iostream>
using namespace std;
int main()
{
long long p[19] = {
198, 232, 816, 200, 1536,
300, 6144, 984, 51200, 570,
92160, 1200, 565248,756, 1474560,
800, 6291456,1782, 65536000
};
for (int i = 1; i <= 19; i++)
{
if (i % 2 == 1)
{
p[i-1] = p[i-1] >> i;
cout << char(p[i - 1]);
}
else
{
p[i-1] = p[i-1] / i;
cout << char(p[i - 1]);
}
}
return 0;
}