Реализация сложения и вычитания BigInteger С#C#

Место общения программистов C#
Anonymous
Реализация сложения и вычитания BigInteger С#

Сообщение Anonymous »

У меня есть задание реализовать BigInteger. У меня есть этот код, который работает правильно, когда у нас есть два положительных целых числа. Внутри каждого метода обычный алгоритм сложения или вычитания в столбце состоит в том, чтобы поочередно работать с каждым битом числа (находящимся в массиве), при этом биты переносятся по мере необходимости. В конструкторе я конвертирую строковое представление во внутренний массив int В ОБРАТНОМ ПОРЯДКЕ, например, "123434" преобразуется в _numbers = {4, 3, 4, 3, 2, 1

Код: Выделить всё

    public BigInteger Add(BigInteger another)
{
var transposition = 0;
var i = 0;

var maxDischarge = Math.Max(_numbers.Length, another._numbers.Length);

var res = new int[maxDischarge + 1];

while (i < maxDischarge || transposition != 0)
{

var sum = transposition;

if (i < _numbers.Length)
{
sum += _numbers[i];
}

if (i < another._numbers.Length)
{
sum += another._numbers[i];
}

res[i] = sum % 10;
transposition = sum / 10;

i++;
}

return new BigInteger(res, _isNeg);
}

public BigInteger Sub(BigInteger another)
{
var transition = 0;
var i = 0;

var maxDischarge = Math.Max(_numbers.Length, another._numbers.Length);

var res = new int[maxDischarge];

while (i < _numbers.Length || i < another._numbers.Length)
{
var sub = -transition;

if (_numbers.Length > another._numbers.Length)
{
if (i < _numbers.Length)
{
sub += _numbers[i];
}

if (i < another._numbers.Length)
{
sub -= another._numbers[i];
}

if (sub < 0)
{
sub += 10;
transition = 1;
}
else                        // by chat gpt
{
transition = 0;
}

res[i] = sub;
i++;
}
else if (_numbers.Length < another._numbers.Length)
{
if (i < another._numbers.Length)
{
sub += another._numbers[i];
}

if (i < _numbers.Length)
{
sub -= _numbers[i];
}

if (sub < 0)
{
sub += 10;
transition = 1;
}
else                        // by chat gpt
{
transition = 0;
}

res[i] = sub;
i++;
}

}

return new BigInteger(res, _isNeg);
}
}
Но у меня возникла проблема с тем, как реализовать сложение и вычитание отрицательных чисел.
Я добавил bool Private readonly bool _isNeg; и в методе ToString я проверяю, есть ли число _isNeg

Подробнее здесь: https://stackoverflow.com/questions/783 ... on-c-sharp

Вернуться в «C#»