I am working on a homework assignment that is suppose to do the following: Create a class HugeInteger that uses a 40-element array of digits to store integers as large as 40 digits each. Provide member functions input, output add, subtract, and multiply. For comparing HugeInteger objects, provide functions isEqualTo, isNotEqualTo, isGreaterThan, isLessThan, isGreaterThanOrEqualTo and isLessThanOrEqualTo--each of these is a "predicate" function that simply returns true if the relationship holds between the two HugeIntegers and returns false if the relationship does not hold. Also, provide a predicate function isZero.
Right now I am stuck on the Subtraction function. I have looked and looked, but I just can't seem to figure out what the problem is and my brain cells seem to be fried right now. I am receiving the following errors:
hugeinteger.cpp(107) : error C2784: 'bool std::operator >(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'HugeInteger'
c:\program files\microsoft visual studio 8\vc\include\xutility(1888) : see declaration of 'std::operator >'
hugeinteger.cpp(107) : error C2784: 'bool std::operator >(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)' : could not deduce template argument for 'const std::pair<_Ty1,_Ty2> &' from 'HugeInteger'
c:\program files\microsoft visual studio 8\vc\include\utility(85) : see declaration of 'std::operator >'
hugeinteger.cpp(107) : error C2676: binary '>' : 'HugeInteger' does not define this operator or a conversion to a type acceptable to the predefined operator
here is my header file:
#ifndef HUGEINTEGER_H
#define HUGEINTEGER_H
class HugeInteger {
public:
HugeInteger(); // default constructor
void input(); // function input
void output(); // function output
HugeInteger add (HugeInteger, HugeInteger ); // function add
HugeInteger subtract (HugeInteger, HugeInteger); // function subtract
HugeInteger multiply (HugeInteger, HugeInteger); // function multiply
bool isEqualTo (const HugeInteger &); // predicate function isEqualTo
bool isNotEqualTo (const HugeInteger &); // predicate function isNotEqualTo
bool isGreaterThan (const HugeInteger &); // predicate function isGreaterThan
bool isLessThan (const HugeInteger &); // predicate function isLessThan
bool isGreaterThanOrEqualTo (const HugeInteger &); // predicate function isGreaterThanOrEqualTo
bool isLessThanOrEqualTo (const HugeInteger &); // predicate function isLessThanOrEqualTo
bool isZero;
private:
char digitArray[40];
int Padding(); // to account for remainder of 40 digits that have no number with a 0
bool error;
}; // end class HugeInteger_H
#endif
Here is my cpp file with the classes and the main for right now..
#include <iostream>
#include <cstring>
#include <cstdlib>
#include "HugeInteger.h"
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
int HugeInteger::Padding() { // to cover for the remainder of the array
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() { // read value from user to set HugeInteger
char inputString[40];
int element = 0;
cin.getline(inputString, sizeof inputString, '\n');
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
void HugeInteger::output() {
if (!error) {
for (int element = Padding(); element < sizeof digitArray; element++) {
cout << digitArray[element];
} // end for loop
} // end if statement
else {
cout << "There has been an error." << endl;
} // end else statement
} // end function output
HugeInteger HugeInteger::add (HugeInteger firstNumber, HugeInteger secondNumber) {
int element = 0, hold = 0, firstTemporary = 0, secondTemporary = 0, result = 0, value = 0;
HugeInteger final;
if (!firstNumber.error && !secondNumber.error) {
element = sizeof digitArray - 1;
while (element >= 0) {
firstTemporary = firstNumber.digitArray[element]-'0';
secondTemporary = secondNumber.digitArray[element]-'0';
result = firstTemporary + secondTemporary + hold;
hold = result / 10;
value = result % 10;
final.digitArray[element] = value + '0';
element--;
} // end while loop
if (hold > 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
} // end if statement
else {
final.error = true;
} // end else statement
return final;
} // end function add
HugeInteger HugeInteger::subtract (HugeInteger firstNumber, HugeInteger secondNumber) {
int element = 0, firstTemporary = 0, secondTemporary = 0, result = 0, copy = 0;
HugeInteger final;
element = sizeof digitArray - 1;
if (!firstNumber.error && !secondNumber.error) {
if (firstNumber > secondNumber) { //The error is pointing to this line for some reason, that I can't figure out.
while (element >= 0) {
secondTemporary = secondNumber.digitArray[element]-'0';
firstTemporary = firstNumber.digitArray[element]-'0';
result = firstTemporary - secondTemporary + copy;
if (result < 0) {
result += 10;
copy = -1;
} // end if statement
else {
copy = 0;
} // end else statement
final.digitArray[element] = result + '0';
element--;
} // end while statement
if (copy < 0) { // 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
} // end if statement
else {
final.error = true;
} // end else statement
} // end if statement
else {
final.error = true;
} // end else statement
return final;
} // end function subtract
int main() {
HugeInteger firstNumber;
HugeInteger secondNumber;
HugeInteger answer;
cout << "Please enter first huge integer: ";
firstNumber.input();
cout << "Please enter second huge integer: ";
secondNumber.input();
// repeat input to user, to verify
cout << "The first number you entered was: ";
firstNumber.output();
cout << endl;
cout << "The second number you entered was: ";
secondNumber.output();
cout << endl;
// add integers
cout << "The addition of the two integers are: ";
answer.add(firstNumber, secondNumber).output();
cout << endl;
// subtract integers
cout << "The subtraction of the two integers are: ";
answer.subtract(firstNumber, secondNumber).output();
cout << endl;
system("PAUSE");
return 0;
}
This post has been edited by drmsndrgns: 20 April 2008 - 07:48 PM

New Topic/Question
Reply


MultiQuote





|