Программу, производящую операцию умножения над операндами являющиеся строковыми представлениями чисел в двоичной форме - C#

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

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

Здрасте! Помогите пожалуйста задачу решить, очень надо, а она сложная для меня слишком
Написать программу, производящую операцию умножения над операндами являющимися строковыми представлениями чисел в двоичной форме. При решении не использовать преобразования строкового типа в числовой.
Спасибо!
Ну вот, а я думала здесь крутые программисты собрались ( Помогите пожалуйста, очень надо!

Решение задачи: «Программу, производящую операцию умножения над операндами являющиеся строковыми представлениями чисел в двоичной форме»

textual
Листинг программы
using System;
 
class TMain
{
    static void Main()
    {
        Console.Write("Введите первое двоичное число: ");
        string s1 = Console.ReadLine(); //Допустим ввели число "110"
        Console.Write("Введите второе двоичное число: ");
        string s2 = Console.ReadLine(); //Допустим ввели число "11"
        
        /* Выравниваем длину строк добавляя нули слева самой короткой.
        строка s2, в нашем случае, станет "011" */
        while (s1.Length != s2.Length)
            if (s1.Length > s2.Length)
                s2 = "0" + s2;
            else
                s1 = "0" + s1;
 
        int i, j;
        string[] ForSum = new string[s1.Length];
        
        /* В массив ForSum сохраняем результаты умножения на один из разрядов.
        В нашем случае это будет:
        ForSum[0] = "110"
        ForSum[1] = "110"
        ForSum[2] =   "0" */
        for (i = s1.Length - 1; i >= 0; i--)
            if (s2[i] == '1')
                ForSum[s1.Length - i - 1] = s1;
            else
                ForSum[s1.Length - i - 1] = "0";
        
        /* Теперь сдвинем влево добавляя нули справа,
        чтобы понять зачем, вспомните умножение столбиком:
        ForSum[0] =  "110"
        ForSum[1] = "1100"
        ForSum[2] =  "000" */
        for (i = 1; i < s1.Length; i++)
            for (j = 1; j <= i; j++)
                ForSum[i] += "0";
        
        /* Теперь добавим нули слева, чтобы все строки стали одинаковой длины:
        ForSum[0] = "00110"
        ForSum[1] = "01100"
        ForSum[2] = "00000" */
        for (i = 0; i < s1.Length; i++)
            while (ForSum[i].Length != 2 * s1.Length - 1)
                ForSum[i] = "0" + ForSum[i];
 
        int Counter = 0;
        string Result = "";
 
        /* Ну а здесь выполняется сложение всех строк из ForSum */
        for (i = ForSum[0].Length - 1; i >= 0; i--)
        {
            for (j = 0; j < s1.Length; j++)
                if (ForSum[j][i] == '1')
                    Counter++;
            Result = (Counter % 2).ToString() + Result;
            if(Counter > 0) Counter /= 2; 
        }
 
        if(Counter > 0) Result = "1" + Result;
        Console.WriteLine("Произведение чисел = " + Result);
        Console.ReadKey();
    }
}

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


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

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

8   голосов , оценка 4.125 из 5
Похожие ответы