Правильный результат при неправильном коде. Как? - C#

Узнай цену своей работы

Формулировка задачи:

Даны натуральные числа m и n. Получить все натуральные числа, меньшие n, квадрат суммы цифр которых равен m. Вопрос в том, почему программа работает правильно при закомментированной строке (строка 23), а с нею, но рабочей, результат не тот?
 
            Console.WriteLine("Даны натуральные числа m и n. Получить все натуральные числа, меньшие n, квадрат суммы цифр которых равен m.");
            Console.Write("Введите n: ");
            int n = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите m: ");
            int m = Convert.ToInt32(Console.ReadLine());
           
            int sum = 0;
            int i = 1;
           int icopy = 1;
            while(i<n)
            {
                while (i > 0)
                {
                    sum += i % 10;
                    i = (i - i % 10) / 10;
                }
                if (sum * sum == m)
                {               
                    i = icopy;
                    Console.WriteLine(i);
                    icopy++;
                   //sum=0;
 
                }
                else
                {
                    icopy++;
                    i = icopy;
                    sum = 0;
                }
            }

Решение задачи: «Правильный результат при неправильном коде. Как?»

textual
Листинг программы
            int sum = 0;
            int i = 1;
           int icopy = 1;
            while(i<n) // есть явная переменная цикла, следует использовать for
            {
                while (i > 0) 
                {
                    sum += i % 10;
                    i = (i - i % 10) / 10; // нет нужды так менять переменную цикла - это приводит к путанице, меняйте лучше icopy
                }
                if (sum * sum == m)
                {  // тут вообще всё запутано, поэтому вопрос и возник             
                    i = icopy; 
                    Console.WriteLine(i);
                    icopy++;
                   //sum=0;
 
                }
                else
                { // тут тоже всё плохо, потому что от этого лишнего кода можно легко избавиться
                    icopy++;
                    i = icopy;
                    sum = 0;
                }
            }

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы