小编Meg*_*ron的帖子

中间位切换方法

给定一个数字 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++

3
推荐指数
1
解决办法
1133
查看次数

标签 统计

c++ ×1