проблема в том что максимальное значение в с++ является 2e18 с long long с unsigned и тому прочее но можно разогнать это дело до например 1e20 или 1e40 напишите код
ромин ёров, Именно этот "арифметический способ" и используется в GMP.
Длина целых чисел 64 бита (0..18446744073709551615 для беззнаковых целых или -9223372036854775808...9223372036854775807 для чисел со знаком) - это ограничение НЕ языка, а процессора. И более длинные числа приходится эмулировать, программно собирая их из 64-битных кусков.
Имеет смысл максимальное число комбинаций, которое может хранить переменная. Это и есть 2E18. А максимальное значение может быть любым, смотря как интерпретировать (взять тот же double) И вообще вы скорее всего не так выразились. Максимальное число комбинаций как раз и определяет максимальное число значащих разрядов (или точность для дробного). А оно строго зависит от размера памяти, отведенного под хранение - 64 бит. И не существует никаких методов без потерь сжимать 128 (или больше) бит в 64. (zip архивы в расчет не берем:)
Есть много готовых библиотек для работы с большими целыми числами, так называемой "длинной арифметикой". Но можно взять и просто исходный код такой библиотеки и использовать в своей программе, например, https://habr.com/ru/articles/172285/