带有单个数字数组的枚举值,不带循环

时间:2012-05-25 23:25:22

标签: enumerate

我正在为基于视觉节点的CAD程序编写一些功能,这些功能不允许我循环,因此我需要一种解决方法来枚举数字列表。我是一名建筑师,编程经验很少,所以任何帮助都会很棒。

有一个数字数组(numArray)就是这样的0,1,2,3,4 ......(第一列)我需要取这些数字并将它们转换成第1,2列的对应数字, 3,4不使用任何循环或嵌套循环。

   numArray 1 2 3 4
        -----------
        0 = 0|0|0|0
        1 = 0|0|0|1
        2 = 0|0|0|2
        3 = 0|0|0|3
        4 = 0|0|1|0
        5 = 0|0|1|1
        6 = 0|0|1|2
        7 = 0|0|1|3
        8 = 0|0|2|0
        9 = 0|0|2|1
        10= 0|0|2|2
        12= 0|0|2|3
        13= 0|0|3|0
        14= 0|0|3|1
        15= 0|0|3|2
        16= 0|1|3|3
        17= 0|1|0|0
        18= 0|1|0|1
        19= 0|1|0|2
        20= 0|1|0|3
        21= 0|1|1|0
        22= 0|1|1|1
        23= 0|1|1|2
        24= 0|1|1|3

我通过实施以下内容找到了第4栏:

int column4 = numArray % 4;

这工作并创建数字0,1,2,3,0,1,2,3 ....这很好但是我不知道如何使用num数组进来产生第3列我再次获得很少的编程经验,所以任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

您正在将输入转换为基数4表示法,因此这将完成工作:

int input[] = {0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24};

for (int i = 0; i < sizeof(input)/sizeof(input[0]); i++)
{
    int c1, c2, c3, c4;

    c4 = input[i] % 4;
    c3 = (input[i] / 4) % 4;
    c2 = (input[i] / 16) % 4;
    c1 = (input[i] / 64) % 4;

    printf("%d = %d\t%d\t%d\t%d\n", input[i], c1, c2, c3, c4);
}