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