Реализация сложения и вычитания 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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