Найдите самый большой палиндром из двух трехзначных чисел в c ++ - PullRequest
0 голосов
/ 18 ноября 2018

моя программа кажется правильной, но я не знаю, почему у нее логическая проблема

int main()
{
int r,s=0;
for(int i=10000;i<=998001;i++)
{
    while (i>0)
    {
        r=i%10;
        s=s*10+r;
        i=i/10;
    }
    cout<<s<<endl;
}

1 Ответ

0 голосов
/ 20 ноября 2018

Ваш вопрос и код не соответствуют Али.Вы сказали, что вам нужен как можно больший палиндром, но вы печатаете каждое обратное число.И у вашего кода тоже есть глюки.Я перечислю ошибки и соответствующие изменения, которые необходимо сделать:

  1. с использованием i в качестве переменной счетчика цикла for и числа, которое вы меняете.Это заставляет i становиться 0 после каждого обращения и, следовательно, цикл for никогда не заканчивается. Исправление для этого ... использует другую переменную, скажем num, и приравнивает ее к i в начале цикла.Это гарантирует, что i останется неизменным, а for останется неизменным.
  2. используйте long int вместо int.Это позволяет избежать каких-либо аномалий и шансов на нежелательные числа.
  3. s (переменная суммы) инициализируется только в начале.Следовательно, каждый раз, когда вы вычисляете новое обратное число, оно добавляет s к своему предыдущему значению. Исправление: Инициализируйте s в 0 в начале цикла for, чтобы вы получили новое обратное значение для каждого значения i.
  4. Вы не проверяетелюбое состояние палиндрома.Вы просто печатаете обратный номер. Исправление: Следовательно, проверьте, является ли число палиндромом, т. Е. Если число, т. Е. i, равно обращенному числу, т. Е. s

Я приложил код ниже.В настоящее время я печатаю самый лучший палиндром в диапазоне, в котором вы проверяли.Если вам нужны все палиндромы, просто раскомментируйте прокомментированную строку cout.

КОД:

#include <iostream>
using namespace std;
int main()
{
int r, s = 0;
long int num, max = 0;
  for(long int i = 10000; i <= 998001; i++)
  {
    s = 0;
    num = i;
    while (num > 0)
    {
        r = num % 10;
        s = s * 10 + r;
        num = num / 10;
    }
    if(s == i) {
      //cout<<s<<endl;   //uncomment this line if you intend to display all palindromes
      if(i > max)
        max = i;
    }
  }
  cout<<max<<endl;
}
...