printЗанятие 16

printДлинные целые в библиотеке boost

На сервере и в среде MinIDE установлена часть boost::multiprecision, обеспечивающая те возможности для работы с длинными целыми числами, которые доступны по умолчанию в языках Java, Python, C#.
Можно использовать типы cpp_int, cpp_rational, cpp_dec_float и типы с фиксированным количеством разрядов (int128_t, cpp_dec_float_100 и т.п.). Допускаются все арифметические операции, а для вещественных чисел – большой набор математических функций. Преобразование значений из обычных в длинные осуществляется автоматически, а из длинных в обычные – явным вызовом операции преобразования. Если требуется преобразовать в обычный тип результат вычислений, то сначала нужно преобразовать его в длинный тип, так как для вычислений используются вспомогательные типы, у которых отсутствуют необходимые операции преобразования (см.пример).
Пример:
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
using namespace boost::multiprecision;
using namespace std;
int main()
{
   cpp_int r=1;
   for(int i=1;i<100;++i)
     r*=i;
   cout<<r<<endl;

   int t=int(cpp_int(r%7777777)); // преобразование результата вычислений в int

   cpp_dec_float_100 b = 2;
   cout << setprecision(numeric_limits<cpp_dec_float_100>::max_digits10)
      << log(b) << endl; // print log(2)
}
loading