题目
解题思路
看到数据范围和依次加1乘2时,想到的是运用位运算来解题。而题目的本质是让被操作之后的数的二进制的后15位都为0。
考虑只进行乘 2时的答案。由于32768是2的15次方。因此最多将一个数乘以15次,然后对32768取模即为0,所以可知,最大的结果就是15.。
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while (n--)
{
int x;
int res = 15;
cin >> x;
for (int i = 0; i <= 15; i++)
for (int j = 0; j <= 15; j++)
if (((x + i) << j) % 32768 == 0)
res = min(res, i + j);
cout << res << ' ';
}
return 0;
}