小编han*_*nie的帖子

中间位切换方法

给定一个数字 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
查看次数

从链表程序中的 insert_node 函数返回指向我当前对象的指针或引用

我是 C++ 的初学者。我正在写一个link list我可以调用我的函数来插入这样的节点:

(假设abc的,我想插入数据link list

list.insert(a)->insert(b)->insert(c);
Run Code Online (Sandbox Code Playgroud)

我是这样做的:

#include <iostream>
using namespace std;

class Node {
public:
    char letter;                     
    Node* next;     
};

class link_list {

private:
    Node* head;       
public:

    link_list() {             
        head = NULL;
    }
    link_list* insertNewNode(char item);
};


link_list* link_list::insertNewNode(char item) {
    Node* temp;
    temp = new Node;
    temp->letter = item;
    temp->next = head;
    head = temp;
    return this;
}

int main() {

    link_list list;
    list.insertNewNode('a')->insertNewNode('b')->insertNewNode('c');
    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ linked-list this

0
推荐指数
1
解决办法
58
查看次数

标签 统计

c++ ×2

linked-list ×1

this ×1