Cod sursa(job #358765)

Utilizator alexandru92alexandru alexandru92 Data 24 octombrie 2009 14:28:55
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <string>
#include <sstream>
#include <fstream>
#include <cstdlib>
#include <algorithm>

/*
 *
 */

using namespace std;
ifstream in;
ofstream out;
typedef string::const_reverse_iterator const_iter;
class BigNumber
{
	string number; 
public: //overloading the operators
	friend inline istream& operator>>( istream&, BigNumber& ); //for reading a BigNumber
	friend inline ostream& operator<<( ostream&, BigNumber ); //for outputing a BigNumber
	BigNumber operator+( BigNumber );
};
inline istream& operator>>( istream& in, BigNumber& a )
{
	in>>a.number;
	return in;
}
inline ostream& operator<<( ostream& out, BigNumber a )
{
	out<<a.number<<'\n';
	return out;
}
BigNumber BigNumber::operator+( BigNumber a )
{
	ostringstream s;
	int sum, t=0;
	const_iter it=number.rbegin(), it2=a.number.rbegin(), iend=number.rend(), iend2=a.number.rend();
	for( ; it < iend && it2 < iend2; ++it, ++it2 )
	{
		sum=*it-'0'+*it2-'0'+t;
		t=sum/10;
	    s<<(sum%10);
	}
	for( ; it < iend; ++it )
	{
		sum=*it-'0'+t;
		t=sum/10;
	    s<<(sum%10);
	}
	if( t )
	  s<<t,t=0;
	for( ; it2 < iend2; ++it2 )
	{
		sum=*it2-'0'+t;
		t=sum/10;
	    s<<(sum%10);
	}
	if( t )
   	  s<<t,t=0;
	BigNumber su;
	su.number=s.str();
	reverse( su.number.begin(), su.number.end() );
	return su;
}
int main()
{BigNumber a,b;
	in.open( "adunare.in" );
	in>>a>>b;
	out.open( "adunare.out" );
	out<<(a+b);
	return 0;
}