Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. friend BigInteger SumWithOneSign(const BigInteger& l, const BigInteger& r) {
  2. std::vector<int> result;
  3. size_t i = l.size_ - 1;
  4. size_t j = r.size_ - 1;
  5. int rest = 0;
  6. while (i >= 0 && j >= 0) {
  7. result.push_back((rest + l.digit_[i] + r.digit_[j]) % number_system);
  8. rest = (rest + l.digit_[i] + r.digit_[j]) / number_system;
  9. --i;
  10. --j;
  11. }
  12. if (i == 0) {
  13. while (j >= 0) {
  14. result.push_back((rest + r.digit_[j]) % number_system);
  15. rest = (rest + r.digit_[j]) / number_system;
  16. }
  17. } else {
  18. while (i >= 0) {
  19. result.push_back((rest + l.digit_[i]) % number_system);
  20. rest = (rest + l.digit_[i]) / number_system;
  21. }
  22. }
  23. auto first = result.begin();
  24. auto last = result.end();
  25. while (first != last && first != --last) {
  26. std::swap(*first++, *last);
  27. }
  28. return BigInteger(result, l.sign_);
  29. BigInteger result;
  30. const auto& max = std::max(l, r);
  31. const auto& min = std::min(l, r);
  32. const int max_size = static_cast<int>(max.digit_.size());
  33. const int min_size = static_cast<int>(min.digit_.size());
  34. for (int i = 0; i < min_size; ++i) {
  35. result.digit_.push_back(l.digit_[i] + r.digit_[i]);
  36. }
  37. for (int i = min_size; i < max_size; ++i) {
  38. result.digit_.push_back(max.digit_[i]);
  39. }
  40. result.Normalize();
  41. return result;
  42. }
  43. friend BigInteger SumWithDifferentSign(const BigInteger& l, const BigInteger& r) {
  44. /*const auto& max = std::max(l, r);
  45. const auto& min = std::min(l, r);
  46. std::vector<int> result;
  47. size_t i = max.size_ - 1;
  48. size_t j = min.size_ - 1;
  49. int rest = 0;
  50. while (j >= 0) {
  51. result.push_back((max.digit_[i] - min.digit_[j] + rest + number_system) % number_system);
  52. rest = (max.digit_[i] + rest < min.digit_[j]) ? -1 : 0;
  53. --i;
  54. --j;
  55. }
  56. if (i != 0) {
  57. result.push_back((max.digit_[i] + rest + number_system) % number_system);
  58. rest = (max.digit_[i] + rest < 0) ? -1 : 0;
  59. }
  60. while (result.back() == 0) {
  61. result.pop_back();
  62. }
  63. if (result.empty()) {
  64. result.push_back(0);
  65. }
  66. auto first = result.begin();
  67. auto last = result.end();
  68. while (first != last && first != --last) {
  69. std::swap(*first++, *last);
  70. }
  71. return BigInteger(result, max.sign_);
  72. BigInteger result;
  73. const auto& max = std::max(l, r);
  74. const auto& min = std::min(l, r);
  75. const int max_size = static_cast<int>(max.digit_.size());
  76. const int min_size = static_cast<int>(min.digit_.size());
  77. for (int i = 0; i < min_size; ++i) {
  78. result.digit_.push_back(max.digit_[i] - min.digit_[i]);
  79. }
  80. for (int i = min_size; i < max_size; ++i) {
  81. result.digit_.push_back(max.digit_[i]);
  82. }
  83. result.Normalize();
  84. return result;
  85.  
  86. }
  87. friend BigInteger Multiplication(const BigInteger& l, const BigInteger& r) {
  88. BigInteger result;
  89. size_t i = l.size_ - 1;
  90. size_t j = r.size_ - 1;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement