AlexandruT

Operatii cu numere mari

Dec 9th, 2014
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int a[10000], b[10000], c[10000], na, nb, nc;
  6.  
  7. void Memoreaza(char s[], int v[], int &n)
  8. {
  9.     int i;
  10.     n = 0;
  11.     for (i = 0; s[i] != 0; i++)
  12.         v[++n] = s[i] - '0';
  13.     // inversez numarul mare
  14.     for (i = 1; i <= n / 2; i++)
  15.         swap(v[i], v[n-i+1]);
  16. }
  17.  
  18. void Afisare(int v[], int n)
  19. {
  20.     for (int i = n; i >= 1; i--)
  21.         cout << v[i];
  22.     cout << "\n";
  23. }
  24.  
  25. void Aduna(int a[], int na, int b[], int nb, int c[], int &nc)
  26. {
  27.     int i, t, x;
  28.     if (na < nb)
  29.         for (i = na + 1; i <= nb; i++)
  30.             a[i] = 0;
  31.     if (nb < na)
  32.         for (i = nb + 1; i <= na; i++)
  33.             b[i] = 0;
  34.     nc = max(na, nb);
  35.     t = 0;
  36.     for (i = 1; i <= nc; i++)
  37.     {
  38.         x = a[i] + b[i] + t;
  39.         if (x < 10)
  40.         {
  41.             c[i] = x;
  42.             t = 0;
  43.         }
  44.         else
  45.         {
  46.             c[i] = x - 10;
  47.             t = 1;
  48.         }
  49.     }
  50.     if (t == 1)
  51.         c[++nc] = 1;
  52. }
  53.  
  54. //a = a * x
  55. void Produs(int a[], int &na, int x)
  56. {
  57.     int t, i, w;
  58.     t = 0;
  59.     for (i = 1; i <= na; i++)
  60.     {
  61.         w = a[i] * x + t;
  62.         a[i] = w % 10;
  63.         t = w / 10;
  64.     }
  65.     while (t > 0)
  66.     {
  67.         a[++na] = t % 10;
  68.         t /= 10;
  69.     }
  70. }
  71.  
  72. int Impartire(int a[], int na, int x, int b[], int &nb)
  73. {
  74.     int i, q, cobor;
  75.     cobor = 0;
  76.     nb = na;
  77.     for (i = na; i >= 1; i--)
  78.     {
  79.         cobor = cobor * 10 + a[i];
  80.         q = cobor / x;
  81.         b[i] = q;
  82.         cobor -= (q * x);
  83.     }
  84.     while (b[nb] == 0) nb--;
  85.     return cobor;
  86. }
  87.  
  88. void Scadere(int a[], int na, int b[], int nb, int c[], int &nc)
  89. {
  90.     int i, t, x;
  91.     if (na < nb)
  92.         for (i = na + 1; i <= nb; i++)
  93.             a[i] = 0;
  94.     if (nb < na)
  95.         for (i = nb + 1; i <= na; i++)
  96.             b[i] = 0;
  97.     nc = max(na, nb);
  98.     t = 0;
  99.     for (i = 1; i <= nc; i++)
  100.     {
  101.         x = a[i] - b[i] + t;
  102.         if (x < 0)
  103.         {
  104.             t = -1;
  105.             c[i] = x + 10;
  106.         }
  107.         else
  108.         {
  109.             t = 0;
  110.             c[i] = x;
  111.         }
  112.     }
  113.     while (c[nc] == 0) nc--;
  114. }
  115.  
  116. int main()
  117. {
  118.     char s[200];
  119.     cin >> s;
  120.     Memoreaza(s, a, na);
  121.     cin >> s;
  122.     Memoreaza(s, b, nb);
  123.     Scadere(a,na,b,nb,c,nc);
  124.     Afisare(c,nc);
  125.     /*Afisare(a, na);
  126.     Afisare(b,nb);
  127.     Aduna(a,na,b,nb,c,nc);
  128.     Afisare(c,nc);
  129.  
  130.     Produs(a, na, 128);
  131.     Afisare(a, na);
  132.  
  133.     Memoreaza("1",a,na);
  134.     for (int i = 2; i <= 18; i++)
  135.         Produs(a,na,i);
  136.     Afisare(a, na);
  137.     cout << Impartire(a,na,3001,b,nb) << "\n";
  138.     Afisare(b, nb);
  139.     */
  140.     return 0;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment