[C/C++] Operatii pe numere mari - Tutoriale si exercitii - GAMELIFE România Jump to content

Recommended Posts

  • Members
Posted (edited)

Operatii pe numere mari

  In continuare voi prezenta cum se pot realiza operatii pe numere mari cu foarte putine linii de cod. In general, multi programatori se complica la aceste operatii, desi nu este nevoie! Vom considera ca numerele mari sunt vectori in care elementul de indice 0 indica lungimea numarului, iar cifrele sunt retinute in ordinea inversa decat cea a citirii.

void add(int A[], int B[])

{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A = (t += A + B) % 10;
      A[0] = i - 1;
}

    Inmultirea unui numar mare cu un numar mic:

void mul(int A[], int B)
{
      int i, t = 0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
              A = (t += A * B) % 10;
      A[0] = i - 1;
}

        Inmultirea unui numar mare cu un numar mare:

void mul(int A[], int B[])
{
      int i, j, t, C[NR_CIFRE];
      memset(C, 0, sizeof(C));
      for (i = 1; i <= A[0]; i++)
      {
              for (t=0, j=1; j <= B[0] || t; j++, t/=10)
                      C[i+j-1]=(t+=C[i+j-1]+A*B[j])%10;
              if (i + j - 2 > C[0]) C[0] = i + j - 2;
      }
      memcpy(A, C, sizeof(C));
}

        Scaderea a doua numere mari:

void sub(int A[], int B[])
{
      int i, t = 0;
      for (i = 1; i <= A[0]; i++) {
              A -= ((i <= B[0]) ? B : 0) + t;
              A += (t = A < 0) * 10;
      }
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}

 

         Impartirea unui numar mare la un numar mic:

void div(int A[], int B)
{
      int i, t = 0;
      for (i = A[0]; i > 0; i--, t %= B)
              A = (t = t * 10 + A) / B;
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}

        Restul unui numar mare la un numar mic:

int mod(int A[], int B)
{
      int i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = (t * 10 + A) % B;
      return t;
}

 

Sursa: Click
 

Edited by Achilles

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.


×
×
  • Create New...

Important Information