Advertisement
Guest User

NUMEREMARI

a guest
Mar 23rd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6. ifstream f("arbori.in" );
  7. ofstream g("arbori.out");
  8.  
  9.  
  10. #define H_SIZE 100
  11.  
  12. struct HUGE
  13. {
  14.     short cifra[H_SIZE];
  15.  
  16.     short& operator[](int x)
  17.     {
  18.         return cifra[x];
  19.     }
  20.  
  21.     void operator=(int x)
  22.     {
  23.         memset(cifra, 0, sizeof cifra);
  24.         while ( x )
  25.         {
  26.             cifra[++cifra[0]] = x%10;
  27.             x /= 10;
  28.         }
  29.     }
  30.     friend HUGE operator*(HUGE H, int X)
  31.     {
  32.         unsigned long T=0;
  33.         for ( int i=1; i<=H[0]; i++)
  34.         {
  35.             H[i]=H[i]*X+T;
  36.             T=H[i]/10;
  37.             H[i]=H[i]%10;
  38.         }
  39.         while (T) /* Cat timp exista transport */
  40.         {
  41.             H[++H[0]]=T%10;
  42.             T/=10;
  43.         }
  44.         return H;
  45.     }
  46.  
  47.     friend HUGE operator*(HUGE A, HUGE B)
  48.     /* C <- A x B */
  49.     {
  50.         HUGE C; memset(C.cifra, 0, sizeof C.cifra);
  51.         int i,j,T=0;
  52.         C[0]=A[0]+B[0]-1;
  53.         for (i=1; i<=A[0]+B[0];) C[i++]=0;
  54.         for (i=1; i<=A[0]; i++)
  55.             for (j=1; j<=B[0]; j++)
  56.                 C[i+j-1]+=A[i]*B[j];
  57.         for (i=1; i<=C[0]; i++)
  58.         {
  59.             T=(C[i]+=T)/10;
  60.             C[i]%=10;
  61.         }
  62.         if (T) C[++C[0]]=T;
  63.  
  64.         return C;
  65.     }
  66.     friend HUGE operator+(HUGE A, HUGE B)
  67.     {
  68.         HUGE result; memset(result.cifra, 0, sizeof result.cifra);
  69.         short r = 0;
  70.  
  71.  
  72.         for ( int i=1; i<=A[0] || i<=B[0]; i++ )
  73.         {
  74.             result[i] = A[i] + B[i] + r;
  75.             r = result[i]/10;
  76.             result[i] %= 10;
  77.         }
  78.         result[0] = max(A[0], B[0]);
  79.         if ( r )
  80.             result[++result[0]] = r;
  81.  
  82.         return result;
  83.     }
  84.     friend HUGE operator-(HUGE A, HUGE B)
  85.     {
  86.         int T=0;
  87.         for ( int i=B[0]+1; i<=A[0]; ) B[i++]=0;
  88.         for ( int i=1; i<=A[0]; i++)
  89.             A[i]+= (T=(A[i]-=B[i]+T)<0) ? 10 : 0;
  90.         while ( !A[A[0]] && A[0] ) A[0]--;
  91.  
  92.         return A;
  93.     }
  94.  
  95.     friend ostream& operator<<(ostream& afs, HUGE A)
  96.     {
  97.         if ( !A[0] ) afs << 0;
  98.  
  99.         for ( int i=A[0]; i>=1; i-- )
  100.             afs << A[i];
  101.  
  102.         return afs;
  103.     }
  104.  
  105.     friend istream& operator>>(istream& in, HUGE& A)
  106.     {
  107.         char readbuff[H_SIZE];
  108.         in >> readbuff;
  109.  
  110.         A[0] = strlen(readbuff);
  111.         for ( int i=1; i<=A[0]; i++ )
  112.             A[A[0]-i+1] = readbuff[i-1] - '0';
  113.  
  114.         return in;
  115.     }
  116.  
  117.     friend int compare(HUGE H1, HUGE H2) {
  118.         // Elimina zero-urile semnificative, daca exista.
  119.         while (H1[0] && !H1[H1[0]]) H1[0]--;
  120.         while (H2[0] && !H2[H2[0]]) H2[0]--;
  121.         if (H1[0] < H2[0]) {
  122.             return -1;
  123.         } else if (H1[0] > H2[0]) {
  124.             return +1;
  125.         }
  126.  
  127.         for (int i = H1[0]; i > 0; --i) {
  128.             if (H1[i] < H2[i]) {
  129.                 return -1;
  130.             } else if (H1[i] > H2[i]) {
  131.                 return +1;
  132.             }
  133.         }
  134.         return 0;
  135.     }
  136. };
  137.  
  138.  
  139. HUGE A, B;
  140.  
  141.  
  142. int main()
  143. {
  144.     f >> A >> B;
  145.     g << A * 4 + A;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement