Складывание слишком больших чисел с++

Складываю 2 числа 111111111111111111111 + 888888888888888888888 через тип данных unsigned long long. Компилятор после сложения выдает -3. Есть другие способы сложения таких чисел?


Ответы (2 шт):

Автор решения: Billy

Размер вашего результата не вмещается в нужный тип, поэтому для беззнаковых чисел происходит wrap around, т.е. после максимального числа идёт снова 0 и так далее по модулю. Для знаковых получаете неопределённое поведение.

Но у вас не только сумма не вмещается, но и даже слагаемые, поэтому программа ill-formed, если, конечно, нет расширения компилятора, которое поддерживает более широкие типы.

В любом случае, обе проблемы решаются использованием длинной арифметики. Есть куча библиотек для них, но можете и сами реализовать https://ru.wikipedia.org/wiki/Длинная_арифметика

→ Ссылка
Автор решения: 300 bucks

Есть другие способы сложения таких чисел. Например тут смотрите http://rosettacode.org/wiki/Arbitrary-precision_integers_(included)

→ Ссылка