给定一个数字 N。我需要以二进制形式切换 N 的中间位并以十进制形式打印结果。
状况:
如果 N 的二进制形式的位数为奇数,则切换中间位(如 111 到 101)。
如果 N 的二进制形式的位数是偶数,则切换两个中间位(如 1111 到 1001)
注意:切换一点意味着将 0 转换为 1,反之亦然。
输入:输入的第一行包含 T 表示测试用例的数量。T 测试用例如下。每个测试用例包含一个数字 N。
输出:对于每个测试用例,在一个新行中,在切换 N 的中间位后打印十进制形式。
约束条件:1 <= T <= 100 1 <= N <= 106
示例: 输入:2 3 5 输出:0 7
测试用例 1:N=3。二进制为 11。切换中间位:00。十进制的 00 为 0。Testcase2:N=5。二进制是 101。切换中间位:111。十进制的 111 是 7。
这是我的方法:我将采用十进制数作为输入并将其转换为二进制,然后根据条件切换位并再次将其转换回二进制。
但是,一旦我将其转换为二进制(为此我使用 32 位大小的数组来保持最大可能)我无法找到切换位的方法..也是由于使用了太多循环,我觉得我的时间复杂度会很糟糕,直到我最终将其转换回十进制形式。
这是我迄今为止尝试过的代码:
#include<iostream>
using namespace std;
int main()
{ int t,i;
cin>>t; //test cases
for(i=0;i<t;i++)
{ int n;
cin>>n;
//convert to binary …Run Code Online (Sandbox Code Playgroud) c++ ×1