#include "number.h" #include #define iRadix (10) Number::Number( int iOrd ) : iOrd( iOrd ), aInt( 4 ) { } Number::Number( const Bu::String &sData, int iOrd ) : iOrd( iOrd ), aInt( 4 ) { for( int j = sData.getSize()-1; j >= 0; j-- ) aInt.append( sData[j]-'0' ); } Number::~Number() { } Number Number::operator+( const Number &rhs ) const { Number ret( iOrd ); int iPlaces = Bu::buMax(rhs.aInt.getSize(), aInt.getSize() )+1; int iCarry = 0; for( int j = 0; j < iPlaces; j++ ) { int iRes = iCarry + digit( j ) + rhs.digit( j ); Bu::println(" Place: %1 + %2 + (%3) = %4"). arg( digit(j) ).arg( rhs.digit( j ) ).arg( iCarry ) .arg( iRes ); ret.aInt.append( (iRes%iRadix) ); if( iRes < iRadix ) iCarry = 0; else iCarry = iRes/iRadix; } return ret; } int Number::digit( int iOrder ) const { if( iOrder >= aInt.getSize() ) return 0; return aInt[iOrder]; }