Стопориться на условии цикла
Есть простой алгоритм, который должен считать произведение каждой чётной цифры 64 битного числа, которое может быть и отрицательным. Проблема в том, что он не работает, так как просто не входит в цикл, в отладке показывает, что дальше while (numcount-G >= 0); не идёт, просто зависает на этом месте. numcount - целочисленная переменная, но почему-то не работает. Как это исправить ? P.s: Не нужно предлогать решить с long long, сайт не полностью будет засчитывать решение, хоть всё правильно, наверное это из-за того, что если число негативное, то минус занимает место в памяти, что не даёт полностью записать само число.
#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;
}
Проблему решил, но вылезает ещё одна проблема

Ответы (1 шт):
Посмотрел задание по ссылке. Ключевые моменты, на которых вы не акцентировали внимание в своём вопросе:
- 64-битное число, которое может быть и отрицательным — это число с диапазоном значений
[-(2**64 - 1); 2**64 - 1], а не[-(2**63); 2**63 - 1], как можно было бы подумать на первый взгляд. Поэтому типаlong longдля хранения числа действительно может быть не достаточно. - Цифра
0считается чётной. - Если входное число не содержит чётных цифр, то необходимо вывести
-1.
Поэтому код будет такой:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string num;
long long mult = 1;
cin >> num;
for (unsigned i = num[0] == '-'; i < num.size(); ++i)
{
char digit = num[i] - '0';
if (digit % 2 == 0)
mult *= digit;
}
if (mult == 1)
mult = -1;
cout << mult;
}