Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- friend BigInteger SumWithOneSign(const BigInteger& l, const BigInteger& r) {
- std::vector<int> result;
- size_t i = l.size_ - 1;
- size_t j = r.size_ - 1;
- int rest = 0;
- while (i >= 0 && j >= 0) {
- result.push_back((rest + l.digit_[i] + r.digit_[j]) % number_system);
- rest = (rest + l.digit_[i] + r.digit_[j]) / number_system;
- --i;
- --j;
- }
- if (i == 0) {
- while (j >= 0) {
- result.push_back((rest + r.digit_[j]) % number_system);
- rest = (rest + r.digit_[j]) / number_system;
- }
- } else {
- while (i >= 0) {
- result.push_back((rest + l.digit_[i]) % number_system);
- rest = (rest + l.digit_[i]) / number_system;
- }
- }
- auto first = result.begin();
- auto last = result.end();
- while (first != last && first != --last) {
- std::swap(*first++, *last);
- }
- return BigInteger(result, l.sign_);
- BigInteger result;
- const auto& max = std::max(l, r);
- const auto& min = std::min(l, r);
- const int max_size = static_cast<int>(max.digit_.size());
- const int min_size = static_cast<int>(min.digit_.size());
- for (int i = 0; i < min_size; ++i) {
- result.digit_.push_back(l.digit_[i] + r.digit_[i]);
- }
- for (int i = min_size; i < max_size; ++i) {
- result.digit_.push_back(max.digit_[i]);
- }
- result.Normalize();
- return result;
- }
- friend BigInteger SumWithDifferentSign(const BigInteger& l, const BigInteger& r) {
- /*const auto& max = std::max(l, r);
- const auto& min = std::min(l, r);
- std::vector<int> result;
- size_t i = max.size_ - 1;
- size_t j = min.size_ - 1;
- int rest = 0;
- while (j >= 0) {
- result.push_back((max.digit_[i] - min.digit_[j] + rest + number_system) % number_system);
- rest = (max.digit_[i] + rest < min.digit_[j]) ? -1 : 0;
- --i;
- --j;
- }
- if (i != 0) {
- result.push_back((max.digit_[i] + rest + number_system) % number_system);
- rest = (max.digit_[i] + rest < 0) ? -1 : 0;
- }
- while (result.back() == 0) {
- result.pop_back();
- }
- if (result.empty()) {
- result.push_back(0);
- }
- auto first = result.begin();
- auto last = result.end();
- while (first != last && first != --last) {
- std::swap(*first++, *last);
- }
- return BigInteger(result, max.sign_);
- BigInteger result;
- const auto& max = std::max(l, r);
- const auto& min = std::min(l, r);
- const int max_size = static_cast<int>(max.digit_.size());
- const int min_size = static_cast<int>(min.digit_.size());
- for (int i = 0; i < min_size; ++i) {
- result.digit_.push_back(max.digit_[i] - min.digit_[i]);
- }
- for (int i = min_size; i < max_size; ++i) {
- result.digit_.push_back(max.digit_[i]);
- }
- result.Normalize();
- return result;
- }
- friend BigInteger Multiplication(const BigInteger& l, const BigInteger& r) {
- BigInteger result;
- size_t i = l.size_ - 1;
- size_t j = r.size_ - 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement