Не проходит 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".
И вы уже задавали свой вопрос ранее: