Advertisement
Ne-Biolog

Untitled

Mar 25th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. const int base = 11;
  8.  
  9. class Integer {
  10. public:
  11. Integer() {}
  12. Integer(string str){
  13. int st = 0;
  14. sign = 1;
  15. if(str[0] == '-'){
  16. st = 1;
  17. sign = -1;
  18. }
  19. for(int i = str.size() - 1; i >= st; --i){
  20. digits.push_back(str[i] == 'a' ? 10 : str[i] - '0');
  21. }
  22. }
  23.  
  24. friend Integer operator + (Integer a , Integer b){
  25. if(a.sign == 1 && b.sign == -1){
  26. return a - b.abs();
  27. }
  28. if(a.sign == -1 && b.sign == 1){
  29. return b - a.abs();
  30. }
  31. if(a.sign == -1 && b.sign == -1){
  32. Integer c = a.abs() + b.abs();
  33. return c.negate();
  34. }
  35. if(a.size() < b.size()){
  36. return b + a;
  37. }
  38. Integer c;
  39. int add = 0;
  40. int len = b.size();
  41. for(int i = 0; i < len; ++i){
  42. c.digits.push_back((a.digits[i] + b.digits[i] + add) % base);
  43. add = (a.digits[i] + b.digits[i] + add) / base;
  44. }
  45. for(int i = len; i < a.size(); ++i){
  46. c.digits.push_back((a.digits[i] + add) % base);
  47. add = (a.digits[i] + add) / base;
  48. }
  49. if(add){
  50. c.digits.push_back(add);
  51. }
  52. return c;
  53. }
  54.  
  55. friend Integer operator - (Integer a , Integer b){
  56. if (a.sign != b.sign) {
  57. Integer c = a.abs() + b.abs();
  58. if (a.sign == -1) {
  59. c.sign *= -1;
  60. }
  61. return c;
  62. }
  63. if (a.sign == -1) {
  64. Integer c = a.negate() - b.negate();
  65. c.sign *= -1;
  66. return c;
  67. }
  68. if (less(a, b)) {
  69. Integer c = b - a;
  70. c.sign = -1;
  71. return c;
  72. }
  73. //a >= b
  74. int len = max(a.size(), b.size());
  75. Integer c;
  76. c.digits.resize(len);
  77. for(int i = 0; i < len; ++i) {
  78. c.digits[i] = a.digits[i] - (i < b.size() ? b.digits[i] : 0);
  79. if (c.digits[i] < 0) {
  80. c.digits[i] += base;
  81. a.digits[i + 1]--;
  82. }
  83. }
  84. while(c.size() > 1 && c.digits.back() == 0) {
  85. c.digits.pop_back();
  86. }
  87. return c;
  88. }
  89. friend istream& operator >> (istream &is, Integer &a) {
  90. string str;
  91. is >> str;
  92. a = Integer(str);
  93. return is;
  94. }
  95. friend ostream& operator << (ostream &os, Integer a) {
  96. if (a.sign == -1) {
  97. os << '-';
  98. }
  99. for(int i = a.size() - 1; i >= 0; --i) {
  100. if (a.digits[i] == 10) {
  101. os << 'A';
  102. } else {
  103. os << a.digits[i];
  104. }
  105. }
  106. return os;
  107. }
  108. private:
  109. static bool less(Integer a, Integer b) {
  110. //returns true if a < b (a >= 0 && b >= 0)
  111. if (a.size() < b.size()) {
  112. return true;
  113. }
  114. if (a.size() > b.size()) {
  115. return false;
  116. }
  117. for (int i = 0; i < a.size(); ++i) {
  118. if (a.digits[i] != b.digits[i]) {
  119. return a.digits[i] < b.digits[i];
  120. }
  121. }
  122. return false;
  123. }
  124. Integer abs(){
  125. Integer cur = *this;
  126. cur.sign = 1;
  127. return cur;
  128. }
  129. Integer negate() {
  130. Integer cur = *this;
  131. cur.sign *= -1;
  132. return cur;
  133. }
  134. int size() {
  135. return digits.size();
  136. }
  137. int sign;
  138. vector < int > digits;
  139. };
  140.  
  141.  
  142. int main() {
  143.  
  144. freopen("in.rtf" , "r" , stdin);
  145. freopen("out.rtf" , "w" , stdout);
  146.  
  147. Integer x, y;
  148. cin >> x >> y;
  149.  
  150. return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement