Я разработал <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).
### Заключение:
Ваш код может корректно выполнять перевод, однако краткость и элегантность важны. С несущим подходом, случаем нуля и более простым составлением строки ваши функции будут работать быстрее и понятнее.
На отрицательных числах будет ошибка. <br/> Ну и проще можно сделать. <br/> <pre><code class="cs">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));
}</code></pre>
Отрицательные числа
<blockquote>Учитывая, что метод не принимает отрицательные значения</blockquote> <br/> Нет, согласно объявлению метода - расчитан. Но это можно все предусмотреть. Как и в объявлении метода, так и в обрабоке метода. И это бы как раз стоило переделать - т.е. или ограничить входные данные типом, или обработать ошибку. <br/> <br/> Дальше. По красоте - метод должен возвращать бинарное представление, а дальше уже выводить в консоль или еще куда - это задача не метода. <br/> <br/> Дальше. Честно я не понял зачем нужна переменная quotient. По моему можно без нее. <br/> <br/> Ну и еще метод должен называться глаголом в идеале )