Informatică, întrebare adresată de alexalghisi, 9 ani în urmă

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ăspunsuri la întrebare

Răspuns de Emiloanta
1

Răspuns:

#include <iostream>

using namespace std;

int a,b;

int main ()

{

cin>>a>>b;

cout<<a+b;

return 0;

}


xmrkertesx: Se face cu numere mari :) INT_MAX = 2147483647 care are 10 cifre
Emiloanta: nu inteleg de ce nu este bine. maximul este de 6 cifre si intra pe int. aceasta este materia pe care am invatat-o eu, la clasa a 6-a.
alexalghisi: Pentru ca cerinta spune ca de 100000 de cifre maxim :)
xmrkertesx: Si eu sunt intr-a 6-a si am invatat numere mari (materie pentru oni).
Răspuns de xmrkertesx
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).


CinevaFaraNume: "uiti" intre ghilimele
CinevaFaraNume: Defapt e caracterul nul s[n]
alexalghisi: Pai ?
CinevaFaraNume: Poate ai problema la numarul de cifre
short int < 2^15
short int < 32768
Daca ai 100 000 cum le mai memorezi in elementul 0?
alexalghisi: Problema se rezolva cu numere mari doar ca nu imi dau seama cum sa le implementez ..
alexalghisi: https://infoarena.ro/lucrul-cu-nr-mari
alexalghisi: sau http://wcipeg.com/wiki/Big_numbers
xmrkertesx: Da chiar :)
xmrkertesx: Acolo la typedef trb sa pui int
alexalghisi: Din pacate tot 30p ........
Alte întrebări interesante