00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <assert.h>
00023
00024 #include "sint.h"
00025
00026
00027
00028
00029 const int sint::INTDIGITS = 10;
00030
00031
00032
00033 sint::sint() : capacity(INTDIGITS),
00034 numDigits(1)
00035 {
00036 digits = new int[capacity];
00037 digits[0] = 0;
00038 }
00039
00040
00041 sint::sint(const sint & src): capacity(src.capacity),
00042 numDigits(src.numDigits)
00043 {
00044
00045 digits = new int[capacity];
00046
00047 for (int i = 0; i < numDigits; i++) {
00048 digits[i] = src.digits[i];
00049 }
00050 }
00051
00052
00053 sint::~sint()
00054 {
00055 delete [] digits;
00056 }
00057
00058
00059 sint operator +(const sint &a, const sint &b)
00060 {
00061 sint sum = a;
00062 sum += b;
00063 return sum;
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 void sint::grow(int size)
00075 {
00076 assert (size >=0);
00077
00078 if (capacity < size) {
00079 int *tmp = new int[size];
00080 for (int i = 0; i < numDigits; i++) {
00081 tmp[i] = digits[i];
00082 }
00083 delete [] digits;
00084 digits = tmp;
00085 capacity = size;
00086
00087 }
00088 }
00089
00090
00091 ostream & operator <<(ostream &os, const sint &b)
00092 {
00093
00094
00095 for (int i = b.numDigits-1; i >= 0; i--) {
00096 os << b.digits[i];
00097 }
00098
00099 return os;
00100 }
00101
00102
00103
00104
00105
00106
00107
00108 void sint::operator *=(const sint & big)
00109
00110
00111 {
00112
00113
00114 sint k(0);
00115 sint limit(big);
00116 sint copy(*this);
00117
00118 *this = 0;
00119 while (k != limit)
00120 {
00121 *this += copy;
00122 k += 1;
00123 }
00124 }