Я пытаюсь написать метод 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

Могу ли я узнать, как это сделать?

-1
DoIt 20 Окт 2017 в 21:14

3 ответа

Лучший ответ

Я получил ответ через комментарии

            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));
                }
            }
0
DoIt 20 Окт 2017 в 19:22

Как правило, вы хотите двоичное представление вашего числа. Выходными данными является список позиций (с обратным отсчетом), на которых в представлении есть позиции.

Обычный способ реализации этого - обычно проверять модуль деления на 2, а затем делить на 2 - в цикле.

0
Piotr Wilkin 20 Окт 2017 в 18:21

Двоичное представление числа буквально представляет собой растровое изображение степеней 2, которые суммируются с этим числом. Просто переберите эти биты от LSB до MSB, испуская соответствующую строку для каждого бита, который установлен в 1.

0
jwdonahue 20 Окт 2017 в 18:20