Advertisement
DacCum

Untitled

Oct 1st, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #define N 10
  4.  
  5. using namespace std;
  6.  
  7. int* createMas();
  8.  
  9. int* set();
  10.  
  11. int compare(int a[], int b[]);
  12.  
  13. void swap(int** a, int** b);
  14.  
  15. int* difference(int a[], int b[]);
  16.  
  17. int* sum(int a[], int b[]);
  18.  
  19. void printMas(int a[]);
  20.  
  21. int main(){
  22.    
  23.     int * a = set();
  24.     int * b = set();
  25.        
  26.     printMas(a);
  27.     printMas(b);
  28.    
  29.     cout << "Difference: " << endl;  
  30.     int *c = difference(a,b);
  31.     printMas(c);
  32.    
  33.     cout << "Sum: " << endl;  
  34.     c = sum(a,b);
  35.     printMas(c);
  36.    
  37.    
  38.     return 0;
  39. }
  40.  
  41.  
  42. int* createMas(){
  43.    
  44.     int *a =  new int [N];
  45.     for(int i = 0; i < N; i++){
  46.         a[i] = 0;
  47.     }
  48.     a[0] = 1;
  49.    
  50.     return a;
  51. }
  52.  
  53. int* set(){
  54.    
  55.     string s;
  56.     cout << " Please, enter value ";
  57.     cin >> s;
  58.     int *a =  createMas();
  59.     int l = s.size() - 1;
  60.    
  61.     if (s[0] == '-'){
  62.         a[0] = 0;
  63.         s.erase(0,1);
  64.     }
  65.     l = s.size() - 1;
  66.    
  67.     for(int i = 0; l - i >= 0 ; i++){
  68.         a[N-1-i] = s[l-i] - '0';
  69.     }
  70.     return a;
  71. }
  72.  
  73. int compare(int a[], int b[]) {
  74.    
  75.     if ( a[0] == 0 && b[0] == 1 )
  76.         return -1;
  77.        
  78.     if ( a[0] == 1 && b[0] == 0 )
  79.         return 1;
  80.    
  81.     for(int i = 0; i < N; i++){
  82.         if(a[i] > b[i]){
  83.             return 1;
  84.         }
  85.         if(a[i] < b[i]){
  86.             return -1;
  87.         }
  88.        
  89.     }
  90.     return 0;
  91. }
  92.  
  93.  
  94. void swap(int** a, int** b) {
  95.     int *tmp = *a;
  96.     *a = *b;
  97.     *b = tmp;
  98. }
  99.  
  100. int* diff_plus(int a[], int b[]){
  101.    
  102.     int *c = createMas();
  103.     bool f = 0;
  104.     if (compare(a,b) < 0){
  105.         swap(a,b);
  106.         f = 1;
  107.     }
  108.     for(int i = N - 1; i > 0; i--){
  109.         c[i] = c[i] + (a[i] - b[i]);
  110.         if (c[i] < 0){
  111.             c[i] = c[i] + 10;
  112.             c[i-1] = -1;
  113.         }
  114.     }
  115.     if(f){
  116.         swap(a,b);
  117.         c[0] = 0;
  118.     }
  119.    
  120.     return c;
  121. }
  122.  
  123. int* difference(int a[], int b[]){
  124.     bool a_sing = a[0],
  125.          b_sing = b[0];
  126.     int *c;
  127.     if(a[0] == 1 && b[0] == 1){
  128.         c = diff_plus(a, b);
  129.     }
  130.     else if(b[0] == 0){
  131.         b[0] = 1;
  132.         c = sum(a, b);
  133.     }
  134.     else{
  135.         a[0] = 1;
  136.         b[0] = 1;
  137.         c = sum(a, b);
  138.         c[0] = 0;
  139.     }
  140.    
  141.    
  142.     a[0] = a_sing;
  143.     b[0] = b_sing;
  144.    
  145.     return c;
  146. }
  147.  
  148. int* sum(int a[], int b[]){
  149.     int *c = createMas();
  150.     if(a[0] == 1 && b[0] == 1) {  
  151.         for(int i = N -1; i > 0; i--){
  152.             c[i] = c[i] + a[i] + b[i];
  153.             if (c[i] > 9){
  154.                 c[i-1] = 1;
  155.                 c[i] = c[i] - 10;
  156.             }
  157.         }
  158.     }
  159.     if(a[0] == 0 && b[0] == 0) {  
  160.         for(int i = N -1; i > 0; i--){
  161.             a[0] = 1;
  162.             b[0] = 1;
  163.             c = sum(a, b);
  164.             c[0] = 0;
  165.             a[0] = 0;
  166.             b[0] = 0;
  167.         }
  168.     }
  169.     if(a[0] == 0 ^ b[0] == 0){
  170.         bool a_sing = a[0],
  171.              b_sing = b[0];
  172.  
  173.         a[0] = 1;
  174.         b[0] = 1;
  175.         if(compare(a, b) == 1){
  176.             c = difference(a, b);
  177.             c[0] = a_sing;
  178.         }
  179.         else if(compare(b, a) == 1){
  180.             c = difference(b, a);
  181.             c[0] = b_sing;  
  182.         }
  183.         a[0] = a_sing;
  184.         b[0] = b_sing;
  185.     }
  186.     return c;
  187. }
  188.  
  189. void printMas(int a[]) {
  190.     int i = 1;
  191.     while (i < N && a[i] == 0)
  192.         i++;
  193.  
  194.     if (i == N) {
  195.         cout << "0" << endl;
  196.         return ;
  197.     }
  198.     if (a[0] == 0){
  199.         cout << "-";
  200.     }
  201.     while(i < N){
  202.         cout << a[i];
  203.         i++;
  204.     }
  205.  
  206.     cout << endl;
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement