Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. using namespace std;
  5. const int osn10 = 1000;
  6. const int osn = 3;
  7. const int maxnum = 100000;
  8.  
  9.  
  10. void print(int a, int base){
  11. int p = a;
  12. int len = 0;
  13. while(p > 0){
  14. len++;
  15. p /= 10;
  16. }
  17. while(len < base){
  18. base--;
  19. cout << "0";
  20. }
  21. if(a)
  22. cout << a;
  23. }
  24.  
  25. int str_to_int(string s){
  26. int res = 0;
  27.  
  28. for(int i = 0; i < s.size();i++){
  29. res = res * 10;
  30. res = res + (s[i] - '0');
  31.  
  32. }
  33.  
  34. return res;
  35. }
  36.  
  37.  
  38. struct BigNum{
  39. int b[maxnum];
  40. int len;
  41. BigNum(){
  42.  
  43. memset(b,0,sizeof(b));
  44. len = 0;
  45. }
  46. void convert(string s){
  47. len = s.size();
  48. string p;
  49. int pos = 0;
  50. for(int i = s.size() - 1; i >= 0; i -= osn){
  51.  
  52. int start = i - osn + 1;
  53. if(start < 0) start = 0;
  54. p=s.substr(start,i - start + 1);
  55. b[pos] = str_to_int(p);
  56. pos++;
  57. }
  58. len = pos;
  59.  
  60. }
  61. void read(){
  62. string s;
  63. cin >> s;
  64. convert(s);
  65. }
  66. void write(){
  67. cout << b[len-1];
  68. for(int i = len - 2; i >= 0; i--){
  69. print(b[i],osn);
  70. }
  71.  
  72. }
  73. BigNum mult(int a){
  74. BigNum res;
  75. int next = 0;
  76. res.len = len;
  77. int k = 0;
  78. for(int i = 0; i < len; i++){
  79. res.b[i+k] = b[i] * a + next;
  80. next = res.b[i+k] / osn10;
  81. res.b[i+k] = res.b[i+k] % osn10;
  82. }
  83. if(next){
  84. res.b[len] = next;
  85. res.len++;
  86. }
  87. return res;
  88. }
  89.  
  90. BigNum mult(BigNum a){
  91. BigNum res;
  92. int next = 0;
  93.  
  94. for (int k = 0; k < a.len; k ++ ){
  95.  
  96. for(int i = 0; i < len | next; i++){
  97. res.b[i+k] += b[i] * a.b[k] + next;
  98. next = res.b[i+k] / osn10;
  99. res.b[i+k] = res.b[i+k] % osn10;
  100. }
  101. }
  102. int pos = len + a.len;
  103. while (pos>0 && !res.b[pos])
  104. pos--;
  105. res.len = pos + 1;
  106. return res;
  107. }
  108.  
  109.  
  110. BigNum sum(BigNum a){
  111. BigNum res;
  112. res.len = max(a.len,len);
  113. int next = 0;
  114. for(int i = 0;i < res.len; i++){
  115. res.b[i] = b[i] + a.b[i] + next;
  116. if(res.b[i] >= osn10){
  117. next = 1;
  118. res.b[i] = res.b[i] - osn10;
  119. } else{
  120. next = 0;
  121. }
  122. }
  123. if(next == 1){
  124. res.len++;
  125. res.b[res.len - 1] = 1;
  126. }
  127. return res;
  128. }
  129.  
  130. BigNum minys(BigNum a){
  131. BigNum resm;
  132. int next = 0;
  133. resm.len = (max(a.len,len));
  134. for(int i = 0; i < len;i++){
  135. resm.b[i] = b[i] - a.b[i];
  136. if(resm.b[i] < 0) {
  137. resm.b[i] = a.b[i] - b[i];
  138. resm.b[i] = -resm.b[i];
  139. }
  140. }
  141.  
  142. while(resm.len>1 && resm.b[resm.len - 1] == 0){
  143. resm.len--;
  144. }
  145. return resm;
  146. }
  147. int compare(BigNum a){
  148. if(a.len > len){
  149. return -1;
  150. }
  151. if(len > a.len){
  152. return 1;
  153. }
  154. for(int i = a.len-1; i >= 0; i --){
  155. if(a.b[i] > b[i]){
  156. return -1;
  157. }
  158. if(b[i] > a.b[i]){
  159. return 1;
  160. }
  161. }
  162. return 0;
  163. }
  164. };
  165. int main()
  166. {
  167.  
  168. ios_base::sync_with_stdio( false );
  169. cin.tie();
  170. cout.tie();
  171. BigNum a,b;
  172. string s;
  173. b.read();
  174. cin >> s;
  175. a.read();
  176. if(s[0] == '-'){
  177. b = b.minys(a);
  178. }else{
  179. b = b.sum(a);
  180. }
  181. b.write();
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement