Alex_tz307

NUMERE MARI

Aug 16th, 2021
735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. // http://algopedia.ro/wiki/index.php/Clasa_a_VI-a_lec%C8%9Bia_8_-_8_nov_2018
  2.  
  3. const int MAXC = 1000;
  4.  
  5. // Suma a doua numere mari
  6. void add(int A[], int B[]) {
  7.   int i, t = 0;
  8.   for (i = 1; i <= A[0] || i <= B[0] || t; ++i, t /= 10)
  9.     A[i] = (t += A[i] + B[i]) % 10;
  10.   A[0] = i - 1;
  11. }
  12.  
  13. // Inmultirea unui numar mare cu un numar mic
  14. void mul(int A[], int B) {
  15.   int i, t = 0;
  16.   for (i = 1; i <= A[0] || t; ++i, t /= 10)
  17.     A[i] = (t += A[i] * B) % 10;
  18.   A[0] = i - 1;
  19. }
  20.  
  21. // Inmultirea unui numar mare cu un numar mare
  22. void mul(int A[], int B[]) {
  23.   int i, j, t, C[MAXC];
  24.   memset(C, 0, sizeof(C));
  25.   for (i = 1; i <= A[0]; ++i) {
  26.     for (t = 0, j = 1; j <= B[0] || t; ++j, t /= 10)
  27.       C[i + j - 1] = (t += C[i + j - 1] + A[i] * B[j]) % 10;
  28.     if (i + j - 2 > C[0])
  29.       C[0] = i + j - 2;
  30.   }
  31.   memcpy(A, C, sizeof(C));
  32. }
  33.  
  34. // Scaderea a doua numere mari
  35. void sub(int A[], int B[]) {
  36.   int i, t = 0;
  37.   for (i = 1; i <= A[0]; ++i) {
  38.     A[i] -= ((i <= B[0]) ? B[i] : 0) + t;
  39.     A[i] += (t = A[i] < 0) * 10;
  40.   }
  41.   for (; A[0] > 1 && !A[A[0]]; --A[0]);
  42. }
  43.  
  44. // Impartirea unui numar mare la un numar mic
  45. void div(int A[], int B) {
  46.   int i, t = 0;
  47.   for (i = A[0]; i > 0; --i, t %= B)
  48.     A[i] = (t = t * 10 + A[i]) / B;
  49.   for (; A[0] > 1 && !A[A[0]]; --A[0]);
  50. }
  51.  
  52. // Restul unui numar mare la un numar mic
  53. int mod(int A[], int B) {
  54.   int i, t = 0;
  55.   for (i = A[0]; i > 0; --i)
  56.     t = (t * 10 + A[i]) % B;
  57.   return t;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment