Advertisement
huutho_96

â

Sep 23rd, 2015
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #define MAX 100
  4. using namespace std;
  5.  
  6. class Bigint
  7. {
  8.     int a[MAX];
  9.     int n;
  10.  
  11. public:
  12.     Bigint()
  13.     {
  14.         n = 0;
  15.     }
  16.  
  17.     Bigint(const Bigint& a)
  18.     {
  19.         Bigint b;
  20.         this->n = a.n;
  21.         for (int i = 0; i < a.n; i++)
  22.             this->a[i] = a.a[i];
  23.     }
  24.  
  25.     Bigint& operator = (Bigint a)
  26.     {
  27.         Bigint b;
  28.         b.n = a.n;
  29.         for (int i = 0; i < a.n; i++)
  30.             b.a[i] = a.a[i];
  31.         return b;
  32.     }
  33.  
  34.     friend istream& operator >> (istream& in, Bigint &b)
  35.     {
  36.         char a[MAX];
  37.         in.getline(a, MAX - 1);
  38.         b.n = strlen(a);
  39.         for (int i = 0; i < b.n; i++)
  40.             b.a[i] = a[i] - '0';
  41.         return in;
  42.     }
  43.  
  44.     friend ostream& operator << (ostream &out, Bigint b)
  45.     {
  46.         for (int i = 0; i < b.n; i++)
  47.         {
  48.             out << b.a[i];
  49.         }
  50.         if (b.n == 0) cout << "0";
  51.         out << endl;
  52.         return out;
  53.     }
  54.  
  55.     int GetSize()
  56.     {
  57.         return n;
  58.     }
  59.  
  60.     friend Bigint& operator - (Bigint a, Bigint b)
  61.     {
  62.         Bigint c;
  63.         int max = ((a.n > b.n) ? a.n : b.n);
  64.  
  65.         int n1 = a.n, n2 = b.n;
  66.         int r = 0;
  67.  
  68.         c.n = max;
  69.  
  70.         while (n1 && n2)
  71.         {
  72.             if (a.a[n1 - 1] - b.a[n2 - 1] - r < 0)
  73.             {
  74.                 c.a[max - 1] = (a.a[n1 - 1] - b.a[n2 - 1] - r) + 10;
  75.                 r = 1;
  76.             }
  77.             else
  78.             {
  79.                 c.a[max - 1] = (a.a[n1 - 1] - b.a[n2 - 1] - r);
  80.                 r = 0;
  81.             }
  82.             max--;
  83.             n1--;
  84.             n2--;
  85.         }
  86.  
  87.         while (n1)
  88.         {
  89.             if (a.a[n1 - 1] - r < 0)
  90.             {
  91.                 c.a[max - 1] = (a.a[n1 - 1] - r) + 10;
  92.                 r = 1;
  93.             }
  94.             else
  95.             {
  96.                 c.a[max - 1] = (a.a[n1 - 1] - r);
  97.                 r = 0;
  98.             }
  99.             max--;
  100.             n1--;
  101.         }
  102.         if (c.a[0] == 0)
  103.         {
  104.             for (int i = 0; i < c.n; i++)
  105.             {
  106.                 c.a[i] = c.a[i + 1];
  107.             }
  108.             c.n--;
  109.         }
  110.         return c;
  111.     }
  112.  
  113.     Bigint div2()
  114.     {
  115.         Bigint b;
  116.         int r = 0;
  117.         int m;
  118.  
  119.         for (int i = 0; i < n; i++)
  120.         {
  121.             r = r * 10 + a[i];
  122.             m = r / 2;
  123.             r = r - m * 2;
  124.             b.a[i] = m;
  125.         }
  126.  
  127.         b.n = n;
  128.  
  129.         if (b.a[0] == 0)
  130.         {
  131.             for (int i = 0; i < b.n; i++)
  132.             {
  133.                 b.a[i] = b.a[i + 1];
  134.             }
  135.             b.n--;
  136.         }
  137.         return b;
  138.     }
  139.  
  140.     Bigint mul2()
  141.     {
  142.         Bigint b;
  143.         int r = 0;
  144.         b.n = n;
  145.         for (int i = n - 1; i >= 0; i--)
  146.         {
  147.             b.a[i] = (a[i] * 2 + r) % 10;
  148.             r = (a[i] * 2 + r) / 10;
  149.         }
  150.         if (r != 0)
  151.         {
  152.             for (int i = b.n; i > 1; i--)
  153.             {
  154.                 b.a[i] = b.a[i - 1];
  155.             }
  156.             b.a[0] = r;
  157.             b.n++;
  158.         }
  159.         return b;
  160.     }
  161.  
  162.     int mod2()
  163.     {
  164.         return (a[n - 1] % 2);
  165.     }
  166.  
  167.     friend void NhiPhan(Bigint a)
  168.     {
  169.         if (a.n != 0)
  170.         {
  171.             NhiPhan(a.div2());
  172.             cout << a.mod2();
  173.         }
  174.     }
  175. };
  176.  
  177.  
  178. void main()
  179. {
  180.     Bigint a;
  181.     cin >> a;
  182.     NhiPhan(a);
  183.     cout << endl;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement