среда, 18 августа 2010 г.

Длинное + короткое

[Вся длинная арифметика]

Более распространенной операцией сложения является операция “Длинное + длинное”. Если имеем дело с частным случаем, когда одно из слагаемых является длинным числом, а второе строго меньше основания системы счисления (<osn), т.е. является цифрой, то в целях оптимизации и ускорения работы программы следует подумать над более быстрой реализацией.

Представляю свою реализацию:
  1. BigInt operator + (const BigInt &a, const int &b)
  2. {
  3.   BigInt res = a;
  4.   int pos = 0;
  5.   res.digits[0] += b;
  6.   while (res.digits[pos]>=osn)
  7.   {
  8.     res.digits[pos+1]++;
  9.     res.digits[pos++]-=osn;
  10.   }
  11.   if (res.digits[res.amount])
  12.     res.amount++;
  13.   return res;
  14. }
* This source code was highlighted with Source Code Highlighter.

Практически идентичную реализацию имеет и операция “длинное – короткое”.

2 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. оператор + принимает два аргумента - два слагаемых. То о чем вы говорите скорее всего это реализация знака +, реализованного внутри структуры/класса, где требуется указать только второй аргумент(слагаемое). Так что здесь никакой ошибки нет

      Удалить