Sunteți pe pagina 1din 7

002

003
004
005

#include <cstring>
#include <cstdlib>
#include "HugeInteger.h"

006
007
008
009
010
011
012
013
014
015
016

using namespace std;


HugeInteger::HugeInteger() {
for (int element = 0; element < 40; element++) {
digitArray[element] = '0';
digitArray[40] = '\0';
} // end for loop
error = false;
}
// end constructor HugeInteger
int HugeInteger::Padding() {
array

017
018
019
020
021
022
023
024
025
026
027
028
029
030

// to cover for the remainder of the

int element;
for (element = 0; element < sizeof digitArray - 2; element++) {
if (digitArray[element] == '0') {
} // end if statement
else {
break;
} // end else statement
} // end for loop
}

return element;
// end int Padding

void HugeInteger::input() {
HugeInteger

// read value from user to set

char inputString[41];
int element = 0;

031
032

cin.getline(inputString, sizeof inputString);

033
034
035
036
037
038
039
040
041
042

if (!error) {
element = (int) strlen(inputString);
while (element >= 0) {
digitArray[40 - strlen(inputString) + element] =
inputString[element];
element--;
} // end while loop
} // end if statement
}
// end function input

043
044
045
046
047
048
049

void HugeInteger::output() {
{

for (int element = Padding(); element < sizeof digitArray; element++)


cout << digitArray[element];
} // end for loop
// end function output

050
051

HugeInteger HugeInteger::add (HugeInteger firstNumber, HugeInteger


secondNumber) {

int element = 0, carry = 0, firstTemporary = 0, secondTemporary = 0,


result = 0, value = 0;
053
HugeInteger final;
054
052

055

element = sizeof digitArray - 1;

056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076

while (element >= 0) {


secondTemporary = secondNumber.digitArray[element]-'0';
firstTemporary = firstNumber.digitArray[element]-'0';
result = firstTemporary + secondTemporary + carry;
carry = result / 10;
value = result % 10;
final.digitArray[element] = value + '0';
element--;
} // end while loop
if (carry > 0) {

// to catch an overflow

for (int element = 0; element < 40; element++) {


digitArray[element] = '0';
digitArray[40] = '\0';
} // end for loop
final.error = true;
} // end if statement
}

return final;
// end function add

HugeInteger HugeInteger::subtract (HugeInteger firstNumber,


HugeInteger secondNumber) {

int element = 0, firstTemporary = 0, secondTemporary = 0, result =


0, copy = 0;
078
HugeInteger final;
079
077

080

element = sizeof digitArray - 1;

081
082
083

while (element >= 0) {


secondTemporary = secondNumber.digitArray[element]-'0';

084
085
086
087
088
089
090
091
092
093
094
095
096
097
098

firstTemporary = firstNumber.digitArray[element]-'0';
result = firstTemporary - secondTemporary + copy;
if (result < 0) {
result += 10;
copy = -1;
} // end if statement

final.digitArray[element] = result + '0';


element--;
} // end while statement
if (copy < 0) {

099
100
101
102
103
104
105
106
107
108
109

else {
copy = 0;
// end else statement

// to catch an underflow

for (int element = 0; element < 40; element++) {


digitArray[element] = '0';
digitArray[40] = '\0';
} // end for loop
final.error = true;
} // end if statement

return final;
// end function subtract

HugeInteger HugeInteger::multiply(HugeInteger firstNumber, HugeInteger


secondNumber) {

110
111
112

int element = 0, digit = 0;


HugeInteger final, numbers;

113

element = sizeof digitArray - 1;

114
115
116
117
118
119
120
121
122
123
124
125
126
127
128

while (element >= 0) {


digit = secondNumber.digitArray[element]-'0';
final = final.additionalMultiply(firstNumber, digit, element);
numbers.add(numbers, final);
element--;
} // end while statement
for (int factor = 0; factor < sizeof digitArray - 1; factor++) {
digitArray[factor] = numbers.digitArray[factor];
} /// end for loop
}

return numbers;
// end function multiply

HugeInteger HugeInteger::additionalMultiply(HugeInteger

firstNumber, intdigit, int position) {


int element = 0, firstTemporary = 0, secondTemporary = 0,
multipliedResult = 0, value = 0, carry = 0;
130
HugeInteger final;
131
129

132

element = sizeof digitArray - 1;

133
134
135
136
137

for (int factor = position; factor < 40; factor++) {


digit *= 10;
} // end for loop

138
139
140
141
142
143
144
145
146
147

while (element >= 0) {


secondTemporary = digit;
firstTemporary = firstNumber.digitArray[element]-'0';
multipliedResult = firstTemporary * secondTemporary + carry;
carry = multipliedResult / 10;
value = multipliedResult % 10;
final.digitArray[element] = value + '0';
element--;
} // end while statement

148
149
150
151
152
153
154
155
156
157

if (carry > 0) {

// to catch overflow

for (int element = 0; element < 40; element++) {


digitArray[element] = '0';
digitArray[40] = '\0';
} // end for loop
final.error = true;
} // end if statement
return final;
// end function additionalMultiply

158
159

bool HugeInteger::isEqualTo(const HugeInteger &number) {

160

for (int element = 0; element < sizeof digitArray; element++)

161

if (digitArray[element] = number.digitArray[element])

162
163
164
165
166
167

return true;
else
}

return false;
// end function isEqualTo

bool HugeInteger::isNotEqualTo(const HugeInteger &number) {

168

if (!isEqualTo(number))

169
170
171

return true;
else
return false;

172
173
174

// end function isNotEqualTo

bool HugeInteger::isGreaterThan(const HugeInteger &number) {

175

for (int element = 0; element < sizeof digitArray; element++)

176

if (digitArray[element] > number.digitArray[element])

177
178
179
180
181
182

return true;
else
return false;
// end function isGreaterThan

bool HugeInteger::isLessThan(const HugeInteger &number) {

183
184
185
186
187
188

if (!isGreaterThan(number))
return true;
else
}

return false;
// end function isLessThan

189

bool HugeInteger::isGreaterThanOrEqualTo(const HugeInteger &number) {

190

for (int element = 0; element < sizeof digitArray; element++)

191
192
193
194
195
196
197

if (digitArray[element] >= number.digitArray[element])


return true;
else
}

bool HugeInteger::isLessThanOrEqualTo(const HugeInteger &number) {

198
199
200
201
202
203

return false;
// end function isGreaterThanOrEqualTo

if (!isGreaterThanOrEqualTo(number))
return true;
else
}

return false;
// end function isLessThanOrEqualTo

204
205
206
207
208
209

int main() {
HugeInteger firstNumber;
HugeInteger secondNumber;
HugeInteger result;

210
211
212

cout << "Please enter first huge integer: ";


firstNumber.input();

213
214

cout << "Please enter second huge integer: ";


secondNumber.input();

215
216
217
218
219

// repeat input to user, to verify


cout << "\nThe first number you entered was: ";
firstNumber.output();
cout << endl;

220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254

cout << "The second number you entered was: ";


secondNumber.output();
cout << endl;
// add integers
cout << "\nThe addition of the two integers are: ";
result.add(firstNumber, secondNumber).output();
cout << endl;
// subtract integers
cout << "The subtraction of the two integers are: ";
result.subtract(firstNumber, secondNumber).output();
cout << endl;
// multiply integers
cout << "The multiplication of the two integers are: ";
result.multiply(firstNumber, secondNumber).output();
cout << endl;
// isEqualTo
if (firstNumber.isEqualTo(secondNumber))
cout << "First number entered is equal to second number
entered." <<endl;
// isNotEqualTo
if (firstNumber.isNotEqualTo(secondNumber))
cout <<"First number entered is not equal to second number
entered." <<endl;
// isGreaterThan
if (firstNumber.isGreaterThan(secondNumber))
cout << "First number entered is greater than the second number
entered." << endl;
// isLessThan
if (firstNumber.isLessThan(secondNumber))
cout << "First number entered is less than the second number
entered." << endl;

255
256
257
258
259
260
261
262

// isGreaterThanOrEqualTo
if (firstNumber.isGreaterThanOrEqualTo(secondNumber))
cout << "First number entered is greater than or equal to the
second number entered." << endl;
// isLessThanOrEqualTo
if (firstNumber.isLessThanOrEqualTo(secondNumber))
cout << "First number enteres is less than or equal to the
second number entered." << endl;

263
264
265
266
267

system("PAUSE");

return 0;
// end method main

S-ar putea să vă placă și