Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Zapisuje a / b w result, a % b w rest
- void VeryLongInt::div(VeryLongInt &b, VeryLongInt *result, VeryLongInt *rest){
- result->digits.clear();
- rest->digits.clear();
- if (b.isZero() || !this->isValid() || !b.isValid()){
- *result = NaN();
- *rest = NaN();
- return;
- }
- *result = Zero();
- *rest = *this;
- VeryLongInt one = 1;
- while (*rest >= b){
- unsigned int shift = rest->numberOfBinaryDigits() - b.numberOfBinaryDigits();
- if (shift > 0)
- shift--;
- *rest -= b << shift;
- *result += one << shift;
- }
- }
- VeryLongInt& VeryLongInt::operator%=(VeryLongInt &b){
- VeryLongInt result;
- VeryLongInt rest;
- div(b, &result, &rest);
- *this = rest;
- return *this;
- } //Ty
- VeryLongInt& VeryLongInt::operator/=(VeryLongInt &b){
- VeryLongInt result;
- VeryLongInt rest;
- div(b, &result, &rest);
- *this = result;
- return b;
- } //T
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement