Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
raport.doc
Скачиваний:
5
Добавлен:
09.02.2015
Размер:
106.5 Кб
Скачать

LongNumber

LongNumber::operator<< (int n)

{

LongNumber temp = *this;

setLength(length_ + n);

for (int i = 0; i < temp.length_; i++)

array_[i + n] = temp.array_[i];

return *this;

}

// Функция устанавливает новую длину массива числа

// создает новый массив заданной длины и инициализирует его нулями.

void

LongNumber::setLength (int length)

{

delete [] array_;

if (length == 0)

length++;

array_ = new int[length];

for (int i = 0; i < length; i++)

array_[i] = 0;

length_ = length;

}

Остаток от деления: код функции аналогичен коду фукции деления, за тем исключением, что сразу после окончания внешнего цикла while возвращается dividend.

Сценарий диалога

Программа последовательно запрашивает два числа, а затем выводит результаты тех операций с длинными числами, которые реализованы в классе LongNumber.

Enter first long number : 9876543210

Enter second long number: 1234567890

a = 9876543210

b = 1234567890

a - b = 8641975320

a + b = 11111111100

a * b = 12193263111263526900

a / b = 8

a % b = 90

a > b = 1

a < b = 0

a >= b = 1

a <= b = 0

a == b = 0

Приложение 1

Заголовочный файл LongNumber.hpp

#ifndef LONG_NUMBER_H

#define LONG_NUMBER_H

#include <iostream>

class LongNumber

{

public:

/**

* Default constructor. Initialize object by one zero array element.

* Sets length_ and sign_ fields to 1.

*/

LongNumber();

/**

* Constructor based on char sequence. Char sequence must consist only

* digits and can start by minus character. Also it must present

* number in normal view. For example string -000000000000 is not

* good idea. Instead this, it must be only zero (0) or at least

* minus zero (-0), which will be converted in zero.

* @param string zero-terminated sequence of char

*/

LongNumber(const char* string);

/**

* Constructor based on other LongNumber object.

* @param number another LongNumber object

*/

LongNumber(const LongNumber& number);

/**

* Constructor based on int.

* @param number

*/

LongNumber(int number);

/**

* Destructor.

*/

~LongNumber();

// ====================================================================

//

// Operators

//

// ====================================================================

LongNumber operator= (const LongNumber& number);

LongNumber operator+ (const LongNumber& number);

LongNumber operator- (const LongNumber& number);

LongNumber operator* (const LongNumber& number);

LongNumber operator* (int number);

LongNumber operator/ (const LongNumber& number);

LongNumber operator% (const LongNumber& number);

LongNumber operator>> (int n);

LongNumber operator<< (int n);

bool operator> (const LongNumber& number);

bool operator>= (const LongNumber& number);

bool operator< (const LongNumber& number);

bool operator<= (const LongNumber& number);

bool operator== (const LongNumber& number);

// Дружественная функция не являющаяся элементом какого-либо класса.

// Т.е. фактически вызов: cout << someLongNum

// заменяется компилятором на вызов функции: operator<<(cout, someLongNum)

// которая, в свою очередь, возвращает ссылку на объект ostream,

// что позволяет писать выражения подобные: cout << someLongNum << "Hello, world!";

// Спецификатор friend позволяет функции получать доступ к приватным

// свойствам и методам класса LongNumber.

friend std::ostream & operator<< (std::ostream& os, const LongNumber& number);

// ====================================================================

//

// Constants

//

// ====================================================================

const static int BASE;

const static int NUMERALS_IN_DIGIT;

private:

// ====================================================================

//

// Fields

//

// ====================================================================

// Number sign, can be 1 or -1

char sign_;

// Current length of array

int length_;

// Pointer to array

int* array_;

// ====================================================================

//

// Methods

//

// ====================================================================

// Returns the lenght of the zero-terminating string

int stringLength(const char* string);

// Convert string to number

int stringToNumber(const char* string, unsigned int length);

// Raise number to power

int power(int base, int power);

// Compute sum of two LongNumbers

LongNumber sum (const LongNumber& a, const LongNumber& b);

// Compute difference of two LongNumbers

LongNumber difference (const LongNumber& a, const LongNumber& b);

// Compare modules of two LongNumbers and return -1 if first is bigger

// than second, 0 - if they are equals, 1 - if first is less than second.

int compareModules (const LongNumber& a, const LongNumber& b);

// Same as compareModules function but also sensitive to the signs of

// numbers.

int compare (const LongNumber& a, const LongNumber& b);

// Return minimum of two values

int minimum (int a, int b);

// Return maximum of two values

int maximum (int a, int b);

// Delete old array and creates new array of specified length

void setLength (int length);

//Set specified digit.

void setDigit(int digit, int value);

};

#endif /* LONG_NUMBER_H */

13

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]