Не проходит 2 теста. Помогите найти ошибку

Есть простой алгоритм который должен находить произведение всех чётных цифр 64 разрядного числа, которое может быть отрицательным. Сначало решил с челочисленными операциями, потом с string, но что первое что второе решение не проходит 2 теста из 11, причём оба вариванта не проходят одинаковые тесты. Где ошибка ?

С целочисленными операциями:

long long n;
unsigned long long a = 1;
int F;
cin >> n;
if (n < 0) n = (-n);
while (n != 0)
{
F=n%10;
    if (F % 2 == 0 and F % 10 != 0)  a *= F;

    n = n / 10;
}
if (a != 1) cout << a;
else cout << "-1";

Решение со строкой:

    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";

Заливал на тест сюда: https://www.e-olymp.com/ru/problems/1604


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

Автор решения: Zhihar
if (F % 2 == 0 and F % 10 != 0)  a *= F;

т.е. в числе 10 произведение чётных цифр не 0?

вроде как в приведённом вами условии нигде не было требований, что "все чётные цифры кроме 0".

И вы уже задавали свой вопрос ранее:

Проблема Debug assertation failed

→ Ссылка