#c #palindrome
#c #палиндром
Вопрос:
При отладке этого кода я ввожу номера диапазона, но не распечатываю ответ. Я попытался записать 10 и 11. 11 — это число палиндрома, которое при возведении в квадрат равно 121, которое следует распечатать.
using namespace std;
int main() {
int n, m, x, y, digit, rev = 0;
cout << "Write 2 natural numbers:" << endl;
cin >> n >> m;
for (int i = n; i <= m; i ) {
x = i;
do {
digit = x % 10;
rev = (rev * 10) digit;
x = x / 10;
} while (x != 0);
if (x == rev) {
y = rev * rev;
rev = 0;
digit = 0;
do {
digit = y % 10;
rev = (rev * 10) digit;
y = y / 10;
} while (y != 0);
if (y == rev) {
cout << "This number is a squared palindrome number which is still a palindrome nuber: " << rev;
}
}
}
return (0);
}
Комментарии:
1. ericlippert.com/2014/03/05/how-to-debug-small-programs
2. Какое значение будет
rev
иметь начало второй итерации в нашем самом внешнемfor
цикле? Какое значение оно должно иметь?3.
if (y == rev)
— Может быть, он не печатается, потомуy
что никогда не равенrev
?4. Как насчет
0,1,2,3
Ответ №1:
Ну, первое, что вы должны сделать, это разделить тест палиндрома на его собственную функцию.
Это упростит ваш основной цикл:
for (int loop = n; loop <= m; loop) {
int loopSq = loop * loop;
if (isPal(loop) amp;amp; isPal(loopSq)) {
std::cout << "FoundOne: " << loop << " and " << loopSq << "n";
}
}
Не объявляйте переменные, пока они вам не понадобятся:
int n, m, x, y, digit, rev = 0;
Что все они означают?
Дайте им значимые имена.
Объявляйте по одной переменной в строке (мы хотим, чтобы код был легко читаемым и инициализируемым).
Не делайте этого:
using namespace std;