Правильный результат при неправильном коде. Как? - 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д