Почему этот цикл вызывает ошибку переполнения? - PullRequest
0 голосов
/ 04 марта 2012

Предполагается, что этот цикл добавляет два числа, которые сохраняются в векторах по их отдельным цифрам. Так, например, leftc будет содержать [10] {0,9,0,0,0,0,0,0,5,7}, а rightc будет содержать [10] {0,0,0,0,0,0,0,0,9,6} и в конце цикла number должно содержать «0900000153» (начальные нули удаляются позже в программе) , Он работает отлично, пока не достигнет index = 0, а затем вызывает ошибку переполнения, но я не могу понять, почему.

string number;                                                      // accumulates the result of the addition
int num;                                                            // holds the result of adding corresponding elements
short carry = 1;

for ( size_t index = leftc.size() - 1; index >= 0; index-- )        // start from the end of the vectors and work toward the beginning
{
    num = leftc.at(index) + rightc.at(index);                       // add the two elements and store in num
    if ( num >= 10 )
    {
        num %= 10;
        leftc.at(index - 1) += carry;
    }
    num += '0';                                                     // convert num from int to char                                             
    number.insert( number.begin(), num );                           // store num at front of number
}

Любая помощь очень ценится. Спасибо!

Ответы [ 3 ]

3 голосов
/ 04 марта 2012

У вас есть проблема здесь

for ( size_t index = leftc.size() - 1; index >= 0; index-- ) 

Поскольку size_t без знака, index будет всегда будет >=0.

1 голос
/ 04 марта 2012

Когда ваш index равен 0, ваш (index-1) будет равен -1 ... следовательно, он выдает ошибку переполнения ... потому что вы пытаетесь получить доступ к элементу с индексом "-1".

0 голосов
/ 04 марта 2012
if ( num >= 10 )
{
    num %= 10;
    leftc.at(index - 1) += carry;
}

Здесь вы получите ошибку, если индекс равен нулю - вы получите доступ к (-1) -ому элементу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...