Cod sursa(job #358387)

Utilizator alexandru92alexandru alexandru92 Data 22 octombrie 2009 21:55:18
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <string>
#include <fstream>
#include <cstdlib>

/*
 *
 */
 using namespace std;
 ifstream in;
 ofstream out;
 class BigNumber
 {
     string Number;
public:
     BigNumber operator+(  BigNumber );
     BigNumber operator-( BigNumber );
     BigNumber operator*( BigNumber );
     BigNumber operator/( BigNumber );
     inline void push( istream& );
     inline void output( ostream& );
 };
 BigNumber BigNumber::operator+( BigNumber Number1 )
 {BigNumber s;
  long t=0,sum;
    string::const_reverse_iterator it=Number.rbegin(), it2=Number1.Number.rbegin(), iend=Number.rend(), iend2=Number1.Number.rend();
    while( it < iend && it2 < iend2 )
    {
        sum=*it-'0'+*it2-'0'+t;
        if( sum > 9 )
          t=sum/10, sum%=10;
        else t=0;
        s.Number.push_back( sum+'0' );
        ++it; ++it2;
    }
    while( it < iend )
    {
        sum=*it-'0'+t;
        if( sum > 9 )
          t=sum/10, sum%=10;
        else t=0;
        s.Number.push_back( sum+'0' );
        ++it;
    }
    if( t )
       s.Number.push_back( t+'0' ), t=0;
    while( it2 < iend2 )
    {
        sum=*it2-'0'+t;
        if( sum > 9 )
          t=sum/10, sum%=10;
        else t=0;
        s.Number.push_back( sum+'0' );
        ++it2;
    }

    if( t )
       s.Number.push_back( t+'0' ),t=0;
    reverse( s.Number.begin(), s.Number.end() );
    return s;
 }
 inline void BigNumber::push( istream& in )
 {
     in>>Number;
 }
 inline void BigNumber::output( ostream& out )
 {
     out<<Number;
 }
 int main()
 {BigNumber a,b;
     in.open("adunare.in");
     a.push(in); b.push(in);
     out.open("adunare.out");
     a=a+b;
     a.output(out);
     return EXIT_SUCCESS;
 }