В большинстве задач нам хватает вместительности long long (64 бита), но в некоторых задачах приходится писать длинную арифметику, однако есть и те, в которых хватит 128 бит, именно поэтому в C++ существует тип __int128. Если вы используете Microsoft Visual Studio, то забудьте про него, его там нет). Теперь расскажу про его особенности:
- существует как знаковый
__int128(от $$$-2^{127}+1$$$ до $$$2^{127}-1$$$, что примерно от $$$-10^{38}$$$ до $$$10^{38}$$$) так и беззнаковыйunsigned __int128(от $$$0$$$ до $$$2^{128}-1$$$, что примерно $$$3*10^{38}$$$)
с ним можно делать все те же арифметические операции
+ - * / % += -= *= /= %= ++ --, битовые операции| & ^ << >>, а также сравнивать< > <= >= == !=можно использовать и функции
abs(), sqrt(), swap()его можно перевести в
long long, int, short, то есть если__int128 aто можно сделатьlong long(a), int(a), short(a), и наоборот если естьlong long aилиint aилиshort aто можно написать__int128(a)Его нельзя считать или вывести с помощью
cout cin, но ниже я привел код чтобы это было делать можно)к великому сожалению написать
a = 123456789123456789123456789не получится придётся либо строку переводить в число либо писать извращённоa = 12345678912345, a = a * 10000000000000 + 6789123456789;советую использовать
using lll = __int128иusing ull = unsigned __int128
Happy coding!)








