Складывание слишком больших чисел с++
Складываю 2 числа 111111111111111111111 + 888888888888888888888 через тип данных unsigned long long. Компилятор после сложения выдает -3. Есть другие способы сложения таких чисел?
Ответы (2 шт):
Размер вашего результата не вмещается в нужный тип, поэтому для беззнаковых чисел происходит wrap around, т.е. после максимального числа идёт снова 0 и так далее по модулю. Для знаковых получаете неопределённое поведение.
Но у вас не только сумма не вмещается, но и даже слагаемые, поэтому программа ill-formed, если, конечно, нет расширения компилятора, которое поддерживает более широкие типы.
В любом случае, обе проблемы решаются использованием длинной арифметики. Есть куча библиотек для них, но можете и сами реализовать https://ru.wikipedia.org/wiki/Длинная_арифметика
Есть другие способы сложения таких чисел. Например тут смотрите http://rosettacode.org/wiki/Arbitrary-precision_integers_(included)