👤

c++
Având în vedere două numere întregi A și B (de cel mult 100000 de cifre fiecare), găsiți suma exactă a acestora.


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int a,b;

int main ()

{

cin>>a>>b;

cout<<a+b;

return 0;

}

Răspuns:

#include <fstream>

#include <cstring>

#define lgMax 100000

using namespace std;

ifstream fin("adunare.in");

ofstream fout("adunare.out");

typedef short int NrMare[lgMax+5];

NrMare a,b,c;

void citire(NrMare x)

{

   char s[lgMax+5];

   fin>>s;   ///Citim numarul ca un sir de caractere

   int n=strlen(s);  ///Calculam numarul de cifre a numarului

   for(int i=n; i>=0; i--)

       x[n-i]=(int)(s[i]-'0'); ///Retinem cifrele invers

   x[0]=n;   ///Memoram numarul total de cifre

}

void suma(NrMare a, NrMare b, NrMare rezultat)

{

   int t=0,Max;

   /// Completam numarul cel mai mic cu zeroouri nesemnificative

   if(a[0]<b[0])

   {

       Max=b[0];

       for(int i=a[0]+1;i<=b[0];i++)

           a[i]=0;

   }

   else

   {

       Max=a[0];

       for(int i=b[0]+1;i<=a[0];i++)

           b[i]=0;

   }

   int i;

   for(i=1;i<=Max; i++)

   {

       int cifra=a[i]+b[i]+t;

       rezultat[i]=cifra % 10;

       t=cifra/10;

   }

   if(t)

       rezultat[i]=t;

   else

       i--;

   rezultat[0]=i;

}

void afisare(NrMare x)

{

   for(int i=x[0];i>0;i--)

       fout<<x[i];

}

int main()

{

   citire(a);

   citire(b);

   suma(a,b,c);

   afisare(c);

   return 0;

}

Explicație:

Numerele A și B nu se incadreaza in long long =>

vom folosi "Lucrul pe numere mari".

Adunare se face cifră cu cifră verificând transportul (ca și pe hârtie).