Некорректно работает второй цикл

Рейтинг: 0Ответов: 1Опубликовано: 22.12.2014

Будьте любезны, наведите на путь истинный. Второй цикл while некорректно работает, в чем причина?

while (i <= a)  
{  
    i++;  
}

while (j <= b)  
{  
    j+=i;                               // второй цикл...
}

Например, переменной а равняется число 2, а переменной в равняется 3. В первом цикле происходит преобразование числа 2 в : 1+1, во втором цикле выражение 1+1 повторяется 3 раза. Другими словами, замена умножения делением. Проблема в том что, первый цикл отрабатывает на ура, второй цикл не выполняется вовсе.

Ответы

▲ 2

1) отформатируйте код, для этого есть специальная кнопка

2) " не корректно" - это как?

3) вопрос немного не по теме, но просто бросается в глаза. Зачем вам вот эта конструкция:

while (i <= a)
{
    i++;
}

не проще ли сразу написать i = a + 1;?

Обновление

эта конструкция производит преобразование допустим числа 5 в 1+1+1+1+1

тут не будет никакого "преобразования". в памяти вы получите то же самое число 5, а не 1+1+..., поэтому весь ваш цикл будет иметь тот же эффект, что и обычное присваивание, только выполнится в несколько раз медленнее

Обновление

@АльфаЧ вашу логику очень трудно назвать логичной. Если вы хотите заменить умножение сложением, зачем вам прибавлять единицы?

Эта простая идея замены умножения на сложение реализуется элементарно (в первом приближении):

int multiply(int first, int second) 
{
    int res = 0;
    while(second-- > 0)
        res += first;

    return res;
}

Правда это дрянная реализация Она неверно обрабатывает отрицательные множители и заглохнет на больших значениях в силу переполнения, но от этих недостатков можно исцелиться, добавив чуть больше кода. Но это уже другая история