Правильный результат при неправильном коде. Как? - 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;
}
}