CCF的最后一组数据偏水,很多人做法是这样的,实际上有风险:
string s = "18446744073709551616";
if(k - sum == 64 && n == 0)
{
cout << s;
}
else
{
cout << (one << (k - sum)) - n;
}
hack:
1 0 1 64
1
正确输出:
18446744073709551615
正确代码:
string s = "18446744073709551616";
if(k - sum == 64)
{
if(n == 0)
{
cout << s;
}
else
{
cout << ULLONG_MAX - n + 1;
}
}
else
{
cout << (one << (k - sum)) - n;
}