Мне кажется, что вы не продумали логику c ясно.
Вот что должно произойти.
Если последнее число равно 0, оно должно быть изменилось на 9, и перенос должен быть сохранен.
Повторяйте до тех пор, пока перенос не требуется поддерживать.
Этот лог c лучше всего реализовать с использованием do - while
l oop. Вот то, что я придумал.
int size = v.size();
bool carry = true;
int i = size - 1;
do
{
if (v.at(i) == 0)
{
v.at(i) = 9;
}
else
{
v.at(i)--;
carry = false;
}
--i;
}
while ( carry == true && i >= 0);
Вот полная программа
#include <iostream>
#include <vector>
void test(std::vector<int> v)
{
int size = v.size();
bool carry = true;
int i = size - 1;
do
{
if (v.at(i) == 0)
{
v.at(i) = 9;
}
else
{
v.at(i)--;
carry = false;
}
--i;
}
while ( carry == true && i >= 0);
for ( auto item : v )
{
std::cout << item << " ";
}
std::cout << std::endl;
}
int main()
{
test({1, 1, 1, 1, 9});
test({5, 0, 0, 0, 0});
}
и ее вывод
1 1 1 1 8
4 9 9 9 9
Смотрите, как она работает на https://ideone.com/lxs1vz.