Программу, производящую операцию умножения над операндами являющиеся строковыми представлениями чисел в двоичной форме - 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();
}
}