C код для палиндромных чисел в диапазоне, которые являются палиндромными при возведении в квадрат

#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;