比如给出n=3作为位数,共有000,001,010,011,100,101,110,111 8种情况。现在怎么做到
输入一个n,把所有的情况都枚举出来,算法是什么?
void DecTBinary(int nData,int nByte)
{
int i = 0,j = 0;
int nArr[16] = {0};
while(nData!= 0)
{
i = nData % 2;
nArr[j++] = i;
nData = nData / 2;
}
j = nByte - 1;
for(;j >= 0;j --)
{
printf("%d",nArr[j]);
}
printf("\n");
}
int main()
{
int n = pow(2.0,5);
for (int i = 0;i < n;i ++)
{
DecTBinary(i,5);
}
return 0;
}
用一个数组来模拟二进制数,开始时让数组的前n位都为0,然后开始模拟二进制加法,每次加1,一直加到这n位全1为止,这样过程中就得到了全部情况
all ==> 111 == (000 | 001 | 010 | 011 | 100 | 101 | 110 | 111)