fbpx

Problema #2266 – CalcMare – Rezolvari PBInfo

de Mihai-Alexandru

Un celebru (sperăm) rezolvitor de pe acest site își va lua un calculator nou dacă intră la liceul la care dorește să intre. Dar momentan rămâne pe calculatorul său rezolvând probleme. Una dintre ele era foarte simplă și constă în adunarea/scăderea a două numere naturale.

Cerința

Se dau 2 numere naturale. Calculați suma / diferenţa lor.

Date de intrare

Fișierul de intrare calcmare.in conține pe prima linie numărul a, pe a doua linie numărul b, iar pe a treia linie un semn + sau - care arată dacă numerele trebuie adunate / scăzute.

Date de ieșire

Fișierul de ieșire calcmare.out va conține pe prima linie numărul R, reprezentând rezultatul determinat.

Restricții și precizări

  • 1 ≤ nr. cifre număr ≤ 1000.
  • Pentru 50% din punctaj semnul va fi + , iar pentru restul de 50%, semnul -.
  • Pentru 20% din punctaj nr. cifre număr ≤ 15.
  • Se garantează că a≥b pentru scăderi.

Exemplu

calcmare.in

123
321
+

calcmare.out

444

Explicație

În fișierul de intrare sunt 2 numere care trebuie adunate, iar suma lor este 444.

#include<fstream>
using namespace std;

ifstream cin("calcmare.in");
ofstream cout("calcmare.out");

int main()
{
    char s[1001];
    int A[100001],B[100001],m=0,n=0;
    char c;
    cin>>s;
    for(int i=0;s[i];i++)
        A[++n]=s[i]-'0';
    for(int i=1;i<=n/2;i++)
        swap(A[i],A[n-i+1]);
    cin>>s;
    for(int i=0;s[i];i++)
        B[++m]=s[i]-'0';
    for(int i=1;i<=m/2;i++)
        swap(B[i],B[m-i+1]);
    cin>>c;
    if(c=='+')
    {
        //adun pe B la A
        if(m>n)
            n=m;
        int t=0;//transporturi
        for(int i=1;i<=n;i++)
        {
            int c=A[i]+B[i]+t;
            A[i]=c%10;//cifra
            t=c/10;//transport
        }
        if(t>0)
            A[++n]=t;
        for(int i=n;i>=1;i--)
            cout<<A[i];
    }
    else
    {
        for(int i=1;i<=n;i++)
        {
            if(A[i]-B[i]<0)
                A[i]+=10 , A[i+1]--;
            int c=A[i]-B[i];
            A[i]=c;
        }
        while(A[n]==0)
            n--;
        int ok=0;
        for(int i=n;i>=1;i--)
        {
            cout<<A[i];
            ok++;
        }
        if(!ok)
            cout << 0;
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa