Ваш вопрос и код не соответствуют Али.Вы сказали, что вам нужен как можно больший палиндром, но вы печатаете каждое обратное число.И у вашего кода тоже есть глюки.Я перечислю ошибки и соответствующие изменения, которые необходимо сделать:
- с использованием
i
в качестве переменной счетчика цикла for
и числа, которое вы меняете.Это заставляет i
становиться 0
после каждого обращения и, следовательно, цикл for
никогда не заканчивается. Исправление для этого ... использует другую переменную, скажем num
, и приравнивает ее к i
в начале цикла.Это гарантирует, что i
останется неизменным, а for
останется неизменным. - используйте
long int
вместо int
.Это позволяет избежать каких-либо аномалий и шансов на нежелательные числа. s
(переменная суммы) инициализируется только в начале.Следовательно, каждый раз, когда вы вычисляете новое обратное число, оно добавляет s
к своему предыдущему значению. Исправление: Инициализируйте s
в 0
в начале цикла for
, чтобы вы получили новое обратное значение для каждого значения i
. - Вы не проверяетелюбое состояние палиндрома.Вы просто печатаете обратный номер. Исправление: Следовательно, проверьте, является ли число палиндромом, т. Е. Если число, т. Е.
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;
}