Большой Целочисленный Заголовок

Написал заголовок с именем большое число, который хранит большие числа в виде строки и выполняет все математические операции над ней, но я не могу переопределить оператор / хорошим и быстрым способом, пожалуйста, помогите мне в этом.

class BigNumber
{
string Number;
bool Sign;
bool TheValueIsSet;
bool IsZero();

BigNumber MultipyWithMinus();
BigNumber WithOutSign();
BigNumber& MakeSimple();

BigNumber operator *(int);
public:
//Ctors
BigNumber();
BigNumber(const string&);
BigNumber(const BigNumber&);
BigNumber(const int);

//Operators
int operator[](int);
BigNumber operator ()(int i,int j);

BigNumber& operator =(BigNumber&);
BigNumber& operator =(int);
BigNumber& operator =(string&);
BigNumber& operator =(const char*);

BigNumber operator +(BigNumber&);
BigNumber operator -(BigNumber&);
BigNumber operator *(BigNumber&);
BigNumber operator /(BigNumber&);
BigNumber operator %(BigNumber&);

BigNumber& operator +=(BigNumber&);
BigNumber& operator -=(BigNumber&);
BigNumber& operator *=(BigNumber&);
BigNumber& operator /=(BigNumber&);
BigNumber& operator %=(BigNumber&);

BigNumber operator ++(int);
BigNumber& operator ++();
BigNumber operator --(int);
BigNumber& operator --();bool operator ==(BigNumber&);
bool operator >(BigNumber&);
bool operator >=(BigNumber&);
bool operator <=(BigNumber&);
bool operator <(BigNumber&);
bool operator !=(BigNumber&);

//Functions
string ToString();
bool IsNegative();
};

BigNumber BigNumber::operator /(BigNumber& Second)
{
//what I must write here ?
}

мы можем сделать операцию деления только с побитовыми операторами?

-2

Решение

Просто так мы говорим на одном языке:

  • частное = результат деления
  • дивиденд = делимое число
  • делитель = число, на которое вы делите

Другими словами: quotient = dividend/divisor;

Я предполагаю, что вы делаете целочисленную математику — принцип почти такой же, если у вас есть десятичная точка, но вы должны «скользить» десятичную точку вдоль, когда вы выполните эти шаги.

Общий принцип строкового деления:

  1. инициализировать временное отношение = 1
  2. инициализировать конечный фактор = 0

  3. Умножьте делитель на 10, пока его длина не станет равна дивиденду

    • / * умножить на 10 = вставить ноль в конце строки * /
    • в то же время, умножьте временное отношение на 10.
  4. если делитель> дивиденд, разделите временное отношение и делитель на 10.

  5. пока делитель < дивиденд

    • вычесть делитель из дивиденда
    • добавить временное отношение к конечному.
  6. Если дивиденд> 0, переходите к 4.

Это явно не самый эффективный метод, но он довольно простой, но и не самый худший (то есть вычитать делитель столько раз, сколько вы можете из дивиденда, а 1000000000/1 потребует 1000000000 итераций — действительно большие числа будут возьми «навсегда»).

0

Другие решения

Других решений пока нет …