BigInt BigInt::operator - (const BigInt& B) const { BigInt A = *this; if (B.sign) return A + (-B); else if (A.sign) return -(-A + B); else if (A < B) return -(B - A); int carry = 0; for (size_t i = 0; i < B.elements.size() || carry != 0; i++) { A.elements[i] -= carry + (i < B.elements.size() ? B.elements[i] : 0); carry = A.elements[i] < 0; if (carry != 0) A.elements[i] += BASE; } A.DelZeros(); return A; }
BigInt BigInt::operator * (const BigInt& B) const { BigInt A = *this; BigInt C; size_t temp = 0, carry = 0; C.elements.resize( A.elements.size() + B.elements.size()); for(size_t i = 0; i < A.elements.size(); i++) { carry = 0; for(size_t j = 0; j < B.elements.size(); j++) { temp = A.elements[i] * B.elements[j] + C.elements[i+j] + carry; carry = temp / BASE; C.elements[i + j] = temp % BASE; } C.elements[i + B.elements.size()] = carry; } C.sign = A.sign!=B.sign; C.DelZeros(); return C; }