Проблема Debug assertation failed
Есть простой алгоритм который должен находить произведение всех чётных цифр 64 разрядного числа, которое может быть отрицательным. При отрицательном числе находит без ошибок и правильно, но если писать положительное то выскакивает следующая ошибка: 
#include <iostream>
#include <string>
using namespace std;
int main() {
string n, o;
int b;
short G=0, numcount;
long long multiplication = 1;
cin >> n;
o = n;
if (o.erase(1, o.length()) == "-") G=1;
numcount = n.length();
while (numcount-G >= 0)
{
b = n[n.length() - 1];
b = b + 2;
b = b % 10; // b - последняя цифра строки
n.erase(n.length()-1, 1);
if (b % 2 == 0 and b != 0) multiplication *= b;
numcount = n.length();
}
cout << multiplication;
}
P.s: Не нужно предлогать решить с long long, сайт не полностью будет засчитывать решение, хоть всё правильно, наверное это из-за того, что если число негативное, то минус занимает место в памяти, что не даёт полностью записать само число.
Ответы (2 шт):
у вас ошибка вот здесь:
while (numcount-G >= 0)
что приводит к тому, что цикл выполняется когда уже массив/строка n не содержит элементов, однако вы всё равно пытаетесь обратиться к элементу -1, поскольку n.length() уже нулевой
Вообще если ваша задача - найти произведение цифр числа, то вы заметно усложнили свой код и сделали его сильно избыточным
можно же сделать было например так:
for (int index = (n[0] == '-' ? 1 : 0); index < n.length(); index++) {
const int digit = n[index] - 48;
multiplication *= digit;
}
или так:
for (const char letter: n) {
if ((letter >= '0') && (letter <= '9'))
multiplication *= letter - 48;
}
или если считывать не строку, а число (правда тогда есть ограничение на кол-во цифр), то так:
n = abs(n);
while (n > 0) {
multiplication *= n % 10;
n /= 10;
}
не работает ничего, что через строку
#include <iostream>
#include <string>
using namespace std;
int main() {
string n, o;
int b;
short G = 0, numcount;
unsigned long long multiplication = 1;
cin >> n;
o = n;
if (o.erase(1, o.length()) == "-") G = 1;
numcount = n.length();
while (numcount - G > 0)
{
b = n[n.length() - 1];
b = b + 2;
b = b % 10; // b - останній елемент строки
n.erase(n.length() - 1, 1);
if (b % 2 == 0 and b != 0) multiplication *= b;
numcount = n.length();
}
if (multiplication != 1) cout << multiplication;
else cout << "-1";
}
и через челочисленные операции не работает, не проходит 2 теста здесь https://www.e-olymp.com/ru/problems/1604