Сложение двоичных чисел - C# (210680)
Формулировка задачи:
Нужно сложить 2 двоичных числа.
Написал класс с двумя методами:
DecimalToBinary() - преобразует десятичное число в двоичное.
BinaryToDecimal() - обратное действие.
каждый по отдельности работает правильно, но вот этот код:
вместо 6(110) вовращает 9(1001). Если поменять значения, то можно догадаться, что первое он суммирует 2 раза.
Если кто-то захочет помочь могу кинуть код класса, но не вижу в этом смысла, если каждый метод сам по себе правильно работает.
MyConventer conv = new MyConventer(); label3.Text = conv.DecimalToBinary(conv.BinaryToDecimal(11) + conv.BinaryToDecimal(11));
Решение задачи: «Сложение двоичных чисел»
textual
Листинг программы
public double BinaryToDecimalSystem(double digit) { double result = 0; bool isPoint = false; bool positive = true; int point_num = 0; string digitStr = digit.ToString(); string real = "", fractional = ""; if (digit < 0) { positive = false; digit = Math.Abs(digit); } //проверяем есть ли точка, если есть значит число не целое. for (int i = 0; i < digitStr.Length; i++) { if (digitStr[i] == ',') { isPoint = true; point_num = i; break; } } if (!isPoint) { result += CalculatePow(digitStr, digitStr.Length - 1); } else { foreach (char x in digitStr) { if (x < point_num) { real += x; } else if (x > point_num) { fractional += x; } } result += CalculatePow(real, real.Length - 1); result += CalculatePow(fractional, -1); } if (!positive) { result = -1 * result; } return result; } private double CalculatePow(string number, double pow) { double result = 0; double[] digits = number.Select(x => double.Parse(x.ToString())).ToArray(); for (int i = 0; i < digits.Length; i++) { result += digits[i] * Math.Pow(2, pow); pow--; } return result; }