Нужен алгоритм сложения и умножения двоичных чисел - C#

Узнай цену своей работы

Формулировка задачи:

Необходимо написать программу с описанием простейшего класса со следующими элементами: полями, конструкторами, свойствами. Описать класс для работы со строкой, позволяющей хранить только двоичное число и выполнять с ним арифметические операции (минимум сложение и умножение). Предусмотреть инициализацию с проверкой допустимости значений. В случае недопустимых значений выбрасываются исключения.

Мне нужен алгоритм сложения и умножения двоичных чисел.

Перевод в десятичное число >> работа с десятичным числом >> перевод обратно в двоичное - такой вариант не подходит. Причем числа могут быть разной длины, например, 11011010101 и 1001011. Классы уже написал, ошибки, думаю, сложности не составят. Заранее благодарен.

Решение задачи: «Нужен алгоритм сложения и умножения двоичных чисел»

textual
Листинг программы
  1. using System;
  2. using System.Collections;
  3. using System.Linq;
  4.  
  5. namespace ConsoleApplication34
  6. {
  7.     public class BinaryNumber
  8.     {
  9.         BitArray number;
  10.  
  11.         public int Length { get { return number.Length; } }
  12.         public BitArray Bits { get { return (BitArray)number.Clone(); } }
  13.  
  14.         public BinaryNumber(string value)
  15.         {
  16.             number = new BitArray(value.Select(x => x == '1').ToArray());
  17.         }
  18.  
  19.         public BinaryNumber(BitArray value)
  20.         {
  21.             number = new BitArray(value);
  22.         }
  23.  
  24.         public override string ToString()
  25.         {
  26.             var result = string.Empty;
  27.             for (int i = 0; i < number.Length; i++)
  28.                 result += number[i] == true ? "1" : "0";
  29.             return result;
  30.         }
  31.  
  32.         static BinaryNumber Equalize(BinaryNumber n1, int length)
  33.         {
  34.             if (n1.Bits.Length >= length) return n1;
  35.  
  36.             var result = new BitArray(length);
  37.             var source = n1.Bits;
  38.             var offset = length - source.Length;
  39.  
  40.             for (int i = length - 1; i >= offset; i--)
  41.                 result[i] = source[i - offset];
  42.  
  43.             return new BinaryNumber(result);
  44.         }
  45.  
  46.         public static BinaryNumber operator +(BinaryNumber n1, BinaryNumber n2)
  47.         {
  48.             var n1Norm = Equalize(n1, n2.Length);
  49.             var n2Norm = Equalize(n2, n1.Length);
  50.             return new BinaryNumber(n1Norm.Bits.Or(n2Norm.Bits));
  51.         }
  52.  
  53.         public static BinaryNumber operator *(BinaryNumber n1, BinaryNumber n2)
  54.         {
  55.             var n1Norm = Equalize(n1, n2.Length);
  56.             var n2Norm = Equalize(n2, n1.Length);
  57.             return new BinaryNumber(n1Norm.Bits.And(n2Norm.Bits));
  58.         }
  59.  
  60.     }
  61.  
  62.     class Program
  63.     {
  64.         static void Main(string[] args)
  65.         {
  66.             BinaryNumber n1 = new BinaryNumber("110101011");
  67.             BinaryNumber n2 = new BinaryNumber("1110111");
  68.  
  69.             Console.WriteLine(n1 + n2);
  70.             Console.WriteLine(n1 * n2);
  71.  
  72.             Console.ReadKey(true);
  73.         }
  74.     }
  75. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.533 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы