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:
#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).
short int < 2^15
short int < 32768
Daca ai 100 000 cum le mai memorezi in elementul 0?