在将整数转换为按位且其总和等于输出整数之和的位数之后计算2的各个幂

时间:2017-10-20 18:14:57

标签: c# bitwise-operators

我正在尝试编写一个接受整数作为输入的c#方法,并返回一个2的幂的整数列表,其总和等于输入整数

例如

Input Integer :15
Output of this should be 1(2^0), 2 (2^1), 4 (2^2), 8 (2^3)
Sum of above integers is 15 = Input Integer


Input Integer :13
Output of this should be 1(2^0), 4 (2^2), 8 (2^3)
Sum of above integers is 13 = Input Integer


Input Integer :8
Output of this should be: 8 (2^3)
Sum of above integers is 15 = Input Integer

我知道这样做的好方法吗?

3 个答案:

答案 0 :(得分:0)

数字的二进制表示字面意思是2的幂的位图,它与该数字相加。只需将这些位从LSB迭代到MSB,为每个设置为1的位发出相应的字符串。

答案 1 :(得分:0)

通常,您需要数字的二进制表示。输出是表示具有1的位置列表(向后计数)。

实现这一点的通常方法是检查除法的模数为2,然后在循环中除以2。

答案 2 :(得分:0)

我通过评论得到答案

            var bits = new BitArray(BitConverter.GetBytes(12));
            List<Double> restrictedList = new List<Double>();
            for(int i=0;i<bits.Count;i++)
            {
                if (bits[i]==true)
                {
                    restrictedList.Add(Math.Pow(2, i));
                }
            }