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: "
<< назад вперед >>