0, если х = 0, 1,еслиО<М<232,

2, если 232 < И < 2е4,

3, если 2е4 < W < 296,

4, если 236 < И < 2128.

и так далее. Класс large будет определять много операций, большая часть которых доступна и для обычных арифметических типов:

• арифметические операции +, -, *, /, % (и функцию divide, объединяю­щую / и %);

• операции битового сдвига « и »;

• все перечисленные выше операции с одновременным присваиванием, что дает +=, -=, *=, /=, %=, «= и »=;

• обычные перегруженные операторы ввода и вывода « и »;

• присваивание =;

• сравнение ==, !=, <, >, <=, >=;

• унарная операция изменения знака -;

• функции abs для получения абсолютной величины числа, Sqrt для вы­числения квадратного корня и power для возведения в степень;

• преобразование каждого из типов int, unsigned int, long и unsigned long к типу large. Кроме этого, определяется преобразование в тип large обычных строк в стиле С, char* (если эти строки содержат только деся­тичные цифры, которым может предшествовать знак минус);

• функция num2char для преобразования числа типа large в символьное представление, записанное в экземпляре класса vector<char> в обрат­ном порядке (см. замечание о переносимости в конце этого раздела).

Большая часть этих операций используется в демонстрационной програм­ме largedem.cpp, которая приведена ниже.

//  largedem.cpp:  Используем тип large. #include  "large.h" int main()

{    large a =  -10000,  b = 10000U,   с = 2000000L, d =   "100000000000000000000",   //  20 нулей x,   у,   z,   u; x  =   (a  *  b  *  b +  1)   *  c; x  -=  c;                //x=a*b*b*c

x /= a * b;       // x = b *  с

у =  large("1234567890123")   %  large("1234567890000"); if   (x == b *  с ScSc у == large(123)) cout <<  "Arithmetic OK"  « endl;

z  = power(d,   100);      //  d в  степени  100

//  =  10  в степени 2000 u  =  sqrt(z);                 //   10  в степени 1000

if   (u == power(large(10),   1000))

cout    <<  "u =   '10 raised to the power 1000'" << endl;

if   (u < power(large(11),   1000)   && u > power(large(9),   1000)) cout <<  "Comparisons OK"  << endl;

vector<char> s;

u.num2char(s);

cout << "First character in output of u: "


<< назад вперед >>