Операции с числами: объясните принцип работы кода (2) - C#
Формулировка задачи:
Всем доброй ночи, я опять продолжаю нубить при изучении C# и пишу с просьбой помочь разобраться с кодом.
Это пример программы в учебнике, по условию тут она находит наибольший и наименьший
множители числа 100.
Ответ, который она выводит:
using System; class Comma { public static void Main() { int i, j; int smallest, largest; int num; num = 100; smallest = largest = 1; for (i = 2, j = num / 2; (i <= num / 2) & (j >= 2); i++, j--) { if ((smallest == 1) & (num % i) == 0) smallest = i; if ((largest == 1) & (num % j) == 0) largest = j; } Console.WriteLine("Наибольший множитель: " + largest); Console.WriteLine("Наименьший множитель: " + smallest); } }
Наибольший множитель: 50 Наименьший множитель: 2
Здесь вроде бы все предельно понятно, но есть два нюанса, зачем нужны переменные smallest и largest, и зачем им присваивается именно 1, если поменять на 0 - ничего не изменится, а если их убрать из инструкции цикла, т.е. убрать (smallest == 1) и (largest == 1) будет такой ответ:Наибольший множитель: 2 Наименьший множитель: 50
То есть тут нужно будет просто переменным названия поменять, местами переставить. Я так понял, что данное присваивание (smallest == 1) способствует тому, что берется первое значение в ответ, а если убрать это присваивание, то программа проходит весь цикл до конца и берет последнее значение, разрешенное условием. И вопрос по самому циклу, почему в итоге получается только два ответа? Ведь по условию (num % i) == 0) должны выводиться все числа num, которые делятся на i без остатка. Или я совсем забыл, но предполагаю, что дело в операторе "&" в этом месте "(i <= num / 2) & (j >= 2)". Именно благодаря оператору & выбирается только один ответ? Я прав или нет? Если нет, объясните как это работает, пожалуйста. Заранее премного благодарен )Решение задачи: «Операции с числами: объясните принцип работы кода (2)»
textual
Листинг программы
for (i = 2, j = num / 2; (i <= num / 2) & (j >= 2); i++, j--) //пусть i=5,а j = 47 ;операция даст результат true=> идём вниз. { if ((smallest == 1) & (num % i) == 0) //100 % 5 = 0 -true smallest = i; if ((largest == 1) & (num % j) == 0) //100 от 47 [S]=[/S] 0 -false largest = j;//в результате false=>начать заного
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д