Я разработал <b><i>программу для перевода чисел из десятичной системы счисления в двоичную</i></b>. Проведя тестирование на нескольких числах, я получил удовлетворительные результаты. Однако у меня есть сомнения: <b>могут ли существовать числа, для которых перевод будет выполнен неправильно?</b><br/><br/> Кроме того, если у вас есть <b>замечания</b> по написанному коду, буду признателен за ваши комментарии.<br/><br/><pre><code class="cs">using System; namespace ConsoleApp { class Class { static void Main(string[] args) { BinaryTranslation(10); } static void BinaryTranslation(int number) { List<int> binar = new List<int>(); int quotient = 1; while(quotient != 0) { if(number % 2 == 1) { number -= 1; binar.Add(1); } else { binar.Add(0); } quotient = number / 2; number = number / 2; } binar.Reverse(); Console.WriteLine(string.Join("", binar)); } } }</code></pre>
Ваш код для перевода числа из десятичной системы счисления в двоичную содержит несколько аспектов, которые можно улучшить. Давайте разберём основные моменты: 1. **Корректность перевода**: Ваш алгоритм должен корректно переводить десятичные числа в двоичную систему, но код немного усложнён. Обычно используется более простой и понятный подход. 2. **Использование списка**: У вас используется `List<int>` для хранения двоичных цифр, и вы используете реверс, чтобы получить правильный порядок. Это может быть эффективно, но применение других подходов уменьшит сложность кода. 3. **Проблемы с переменными**: Переменная `quotient` не является обязательной для данного алгоритма. Ваша функция может быть упрощена. 4. **Улучшение кода**: Можно использовать строку для построения двоичного представления, что избавит от необходимости реверса. Вот пример исправленного кода: ```csharp using System; namespace ConsoleApp { class Program { static void Main(string[] args) { BinaryTranslation(10); } static void BinaryTranslation(int number) { if (number == 0) // Обработайте случай нуля { Console.WriteLine(0); return; } string binary = ""; while (number > 0) { binary = (number % 2) + binary; // Обращаем порядок number /= 2; } Console.WriteLine(binary); } } } ``` ### Основные изменения: - Убрана ненужная переменная `quotient`. - Вместо списка используется строка для сборки двоичного представления. - Добавлена обработка случая, когда передано число 0 (вывод 0). ### Заключение: Ваш код может корректно выполнять перевод, однако краткость и элегантность важны. С несущим подходом, случаем нуля и более простым составлением строки ваши функции будут работать быстрее и понятнее.
На отрицательных числах будет ошибка.
Ну и проще можно сделать.
static void BinaryTranslation(int number) { List<int> binar = new List<int>(); do { binar.Add(number % 2); number /= 2; } while (number > 0); binar.Reverse(); Console.WriteLine(string.Join("", binar)); }
Отрицательные числа
Учитывая, что метод не принимает отрицательные значения
Нет, согласно объявлению метода - расчитан. Но это можно все предусмотреть. Как и в объявлении метода, так и в обрабоке метода. И это бы как раз стоило переделать - т.е. или ограничить входные данные типом, или обработать ошибку.
Дальше. По красоте - метод должен возвращать бинарное представление, а дальше уже выводить в консоль или еще куда - это задача не метода.
Дальше. Честно я не понял зачем нужна переменная quotient. По моему можно без нее.
Ну и еще метод должен называться глаголом в идеале )