解题思路
当 k\bmod2=1 时,在一次操作后为 k(k+\dfrac{1}{2})=2k+1,显然为整数。
当 k\bmod2=0 时,\lceil r \rceil r=(k+\dfrac{1}{2})(k+1)=k^2+\dfrac{3}{2}k+\dfrac{1}{2}。
而 k^2+k 显然为整数。故只用考虑 \dfrac{1}{2}k+\dfrac{1}{2} 是否为整数。
设 k=2k',则 \dfrac{1}{2}k+\dfrac{1}{2}=k'+\dfrac{1}{2}。
又因 $k'=\dfrac{1}{2}k$,所以使得 $k'\bmod2=1$ 的次数为 $k$ 的二进制末尾 $0$ 的个数。
最终答案在此基础上加 $1$ 即可。
注意特判 $k=0$ 的情况,当 $k=0$ 时,无论如何操作,$r$ 都为 $\dfrac{1}{2}$。
# AC 代码
```cpp
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x)&(-(x))
//使用 lowbit 求二进制末尾 0 的个数。
//k 末尾 0 的个数为 log2(lowbit(k))。
using namespace std;
int t,k;
signed main(){
cin>>t;
while(t--){
cin>>k;
if(k) cout<<log2(lowbit(k))+1<<endl;//当 k 不为 0 时的情况(别忘了 +1)。
else cout<<"NO!"<<endl;//当 k=0 时直接输出 NO。
}
return 0;
}
```