在C ++数组中存储3位二进制数

时间:2015-06-08 12:21:10

标签: c++ binary

我有一个程序需要2个输入,N和myarray []。

    cin >> N; 
    cin >> myarray[];

在这个例子中,N = 3,这意味着必须分配一个大小为3的整数数组,并假设myarray []的条目是{1,2,3}。

现在我有一个函数 createsubset(),可以创建条目{1,2,3}的所有可能子集。我遵循的逻辑是:

包含n个元素的集合的子集总数为m = 2 ^ n,因为元素可以在子集中存在或不存在。

因此,当m = 7且相应的二进制表示法为111时。 现在从m = 0迭代到m = 7以生成所有子集(除了作为m = 8的结果的集合本身): 示例:

     m=0, binary=000, subset={ }
     m=1, binary=001, subset={c}
     m=2, binary=010, subset={b}
     m=3, binary=011, subset={b,c}

等等。

这是由函数 generate()完成的,它从m = 0迭代到m = 8。

      void generate()
      {
        for(m=0; m<8; m++)
        {
           decimaltobinary(m);

        }
      }

现在,我必须将 decimaltobinary()函数的输出(这是一个3位二进制数)存储在一个数组中,稍后我将用它来创建子集。这是我现在被卡住的部分。 我们可以在阵列中存储多位二进制数并直接使用吗? 请帮我解决这个问题。 关于 createsubset()功能的任何建议也受到欢迎。

1 个答案:

答案 0 :(得分:0)

C / C ++中的数字以二进制形式存储,因此无需“转换”它们。您可以使用任何想要存储3位数的C / C ++无符号整数类型,例如,将它们存储在std :: vector&lt; unsigned char&gt;中。会工作得很好。

沿着这条线,不是将你读到的数字存储到数组[固定大小的容器]中,而是考虑将它们存储在矢量[可变大小的容器]中,因为你不知道“预先”的大小