Advertisement
leviathan0117

C++ кусочек длинной арифметики

Mar 26th, 2021
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void sum_p(const string &A, const string &B, string &ans) {
  6.     int G = 0;
  7.     int i = 1;
  8.     for (; i < min(A.size(), B.size()); i++) {
  9.         int a, b;
  10.         a = A[i] - '0';
  11.         b = B[i] - '0';
  12.         int s = G + a + b;
  13.         ans += (s % 10) + '0';
  14.         G = s / 10;
  15.     }
  16.  
  17.     if (i < A.size()) {
  18.         for (; i < A.size(); i++) {
  19.             int a = A[i] - '0';
  20.             int s = G + a;
  21.             ans += (s % 10) + '0';
  22.             G = s / 10;
  23.         }
  24.     } else if (i < B.size()) {
  25.         for (; i < B.size(); i++) {
  26.             int b = B[i] - '0';
  27.             int s = G + b;
  28.             ans += (s % 10) + '0';
  29.             G = s / 10;
  30.         }
  31.     }
  32.     if (G) {
  33.         ans += G + '0';
  34.     }
  35. }
  36. // |A| + |B|
  37. // кладут в анс ответ, НО БЕЗ ЗНАКА
  38.  
  39. void sub_p(const string &A, const string &B, string &ans) {
  40.  
  41. }
  42. // |A| > |B| -- обязательное условие
  43. // |A| - |B|
  44.  
  45. bool compare(const string &A, const string &B) {
  46.  
  47. }
  48. // |A| > |B|
  49.  
  50. string sum(const string &A, const string &B) {
  51.     int sgnA, sgnB;
  52.     if (A[0] == '-') {
  53.         sgnA = -1;
  54.     } else {
  55.         sgnA = 1;
  56.     }
  57.     if (B[0] == '-') {
  58.         sgnB = -1;
  59.     } else {
  60.         sgnB = 1;
  61.     }
  62.  
  63.     string ans;
  64.  
  65.     if (sgnA == 1 && sgnB == 1) {
  66.         ans += '+';
  67.         sum_p(A, B, ans);
  68.     } else if (sgnA == -1 && sgnB == -1) {
  69.         ans += '-';
  70.         sum_p(A, B, ans);
  71.     } else if (sgnA == 1) {
  72.         if (compare(A, B) == 1) {
  73.             ans += '+';
  74.             sub_p(A, B, ans);
  75.         } else {
  76.             ans += '-';
  77.             sub_p(B, A, ans);
  78.         }
  79.     } else {
  80.         if (compare(A, B) == 1) {
  81.             ans += '-';
  82.             sub_p(A, B, ans);
  83.         } else {
  84.             ans += '+';
  85.             sub_p(B, A, ans);
  86.         }
  87.     }
  88.  
  89.  
  90.     return ans;
  91. }
  92.  
  93. string sub(const string &A, const string &B) {
  94.  
  95. }
  96.  
  97.  
  98. void input_num(string &s) {
  99.     string tmp;
  100.     cin >> tmp;
  101.     if (tmp[0] == '-') {
  102.         s += '-';
  103.         for (int i = tmp.size() - 1; i > 0; --i) {
  104.             s += tmp[i];
  105.         }
  106.     } else {
  107.         s += '+';
  108.         for (int i = tmp.size() - 1; i >= 0; --i) {
  109.             s += tmp[i];
  110.         }
  111.     }
  112. }
  113.  
  114. void print(const string &s) {
  115.     if (s[0] == '-') {
  116.         cout << "-";
  117.     }
  118.     for (int i = s.size() - 1; i > 0; --i) {
  119.         cout << s[i];
  120.     }
  121. }
  122.  
  123. int main() {
  124.     string a, b;
  125.     input_num(a);
  126.     input_num(b);
  127.  
  128.     string s = sum(a, b);
  129.     print(s);
  130.  
  131.     return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement