制作二进制数的程序

时间:2015-10-17 20:08:01

标签: c++ binary

你好,我需要一些帮助,我不知道如何做到这一点对不起我的英语

我需要用C ++编写一个程序,告诉我可恶的数字,根据我的老师的说法,一个可恶的数字是一些转换为二进制的数字有一个奇数,例如2(10)4(100)7(111 )8(1000)11(1011)

所以我需要开发一个执行此操作的程序

输入一个数字,然后在输入该数字之前告诉我所有可恶的数字 希望你能理解这个

由于

好的,我在博客上找到了这段代码

ConcurrentHashMap<String, Boolean> taskToFinished = new ConcurrentHashMap();
    taskToFinished.put("taskA", false);
    taskToFinished.put("taskB", false);

public void checkForAllFinished() {
    boolean allFinished = true;
    for (Boolean taskFinished = tasksToFinished.values()) {
        if (!taskFinished) {
            allFinished = false;
            break;
        }
    }
    if (allFinished) {
       fireAllFinished()
    }
}

//Thread1
public void run() {
    taskToFinished.put("taskA", true);
    checkForAllFinished();
}

//Thread1
public void run() {
    taskToFinished.put("taskB", true);
    checkForAllFinished();
}

我只是指定了一个数字而且我修改了让用户输入任何数字现在我只需要打印奇数二进制数字我该怎么做?

1 个答案:

答案 0 :(得分:0)

那么你需要一个函数将你的十进制数除以2直到0并递增每个除法的余数。如果结果是奇数,那么你有可憎的数字。

类似的东西:

int res = 0;
while (number > 0)
{
    res += number % 2; // add the remainder of the division by 2 to res
    number = number / 2; 
}
if (res % 2 == 1) // if res is odd, its modulo by 2 is 1
    // hateful number

此外,如果您熟悉按位操作,我知道有人可以做到这一点:

int res;
for (res = 0; number > 0; res++)
{
    number &= number - 1;
}
if (res % 2 == 1)
    // hateful number

编辑:

您可以先检查我显示的1的数量,然后决定打印它,如果它是您说的“可恶”数字。要打印它,以下代码段可能会有所帮助:

std::vector<int> vec;
while(number > 0)
{
    vec.push_back(number % 2);
    number = number / 2;
}

请注意,向量将在6中反转,例如011而不是110。您可以使用std::reverse标题的algorithm将其撤消,也可以按相反顺序打印。