diff options
author | Mike Buland <mike@xagasoft.com> | 2013-04-15 15:28:12 -0600 |
---|---|---|
committer | Mike Buland <mike@xagasoft.com> | 2013-04-15 15:28:12 -0600 |
commit | f34eb76357fdfc314d6451fd11a2e4d6fcfce434 (patch) | |
tree | d4769ae51a1c703b0e55af0ef38a31991f9f7c3a /src/number.cpp | |
download | clic-f34eb76357fdfc314d6451fd11a2e4d6fcfce434.tar.gz clic-f34eb76357fdfc314d6451fd11a2e4d6fcfce434.tar.bz2 clic-f34eb76357fdfc314d6451fd11a2e4d6fcfce434.tar.xz clic-f34eb76357fdfc314d6451fd11a2e4d6fcfce434.zip |
Initial checkin.
This project will most likely just be stuck into libbu++, but I didn't
want to deal with building it all in windows.
Diffstat (limited to 'src/number.cpp')
-rw-r--r-- | src/number.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/number.cpp b/src/number.cpp new file mode 100644 index 0000000..e64be94 --- /dev/null +++ b/src/number.cpp | |||
@@ -0,0 +1,54 @@ | |||
1 | #include "number.h" | ||
2 | |||
3 | #include <bu/sio.h> | ||
4 | |||
5 | #define iRadix (10) | ||
6 | |||
7 | Number::Number( int iOrd ) : | ||
8 | iOrd( iOrd ), | ||
9 | aInt( 4 ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | Number::Number( const Bu::String &sData, int iOrd ) : | ||
14 | iOrd( iOrd ), | ||
15 | aInt( 4 ) | ||
16 | { | ||
17 | for( int j = sData.getSize()-1; j >= 0; j-- ) | ||
18 | aInt.append( sData[j]-'0' ); | ||
19 | } | ||
20 | |||
21 | Number::~Number() | ||
22 | { | ||
23 | } | ||
24 | |||
25 | Number Number::operator+( const Number &rhs ) const | ||
26 | { | ||
27 | Number ret( iOrd ); | ||
28 | |||
29 | int iPlaces = Bu::buMax(rhs.aInt.getSize(), aInt.getSize() )+1; | ||
30 | |||
31 | int iCarry = 0; | ||
32 | for( int j = 0; j < iPlaces; j++ ) | ||
33 | { | ||
34 | int iRes = iCarry + digit( j ) + rhs.digit( j ); | ||
35 | Bu::println(" Place: %1 + %2 + (%3) = %4"). | ||
36 | arg( digit(j) ).arg( rhs.digit( j ) ).arg( iCarry ) | ||
37 | .arg( iRes ); | ||
38 | ret.aInt.append( (iRes%iRadix) ); | ||
39 | if( iRes < iRadix ) | ||
40 | iCarry = 0; | ||
41 | else | ||
42 | iCarry = iRes/iRadix; | ||
43 | } | ||
44 | |||
45 | return ret; | ||
46 | } | ||
47 | |||
48 | int Number::digit( int iOrder ) const | ||
49 | { | ||
50 | if( iOrder >= aInt.getSize() ) | ||
51 | return 0; | ||
52 | return aInt[iOrder]; | ||
53 | } | ||
54 | |||