Я не могу понять, почему этот код не работает. Кажется, он даже не проходит через мои циклы и вложенные циклы. Я очень новичок в программировании. Я пытался ответить на вопросы Эйлера для практики. Извините, если мой код ужасен.
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(int x) {
string str = to_string(x);
for(string::reverse_iterator rit=str.rbegin(); rit!=str.rend(); ++rit) {
string pal = to_string(*rit);
if(pal == str) {
return true;
}else {
return false;
}
}
}
int main() {
int max[] = {0, 0};for(int i=999; i>99; i--) {
for( int j =999; j>99; j--) {
int pal = i*j;
if(isPalindrome(pal) == true) {
max[1] = pal;
if(max[1] > max[0]){
max[0] = pal;
}
}
}
}
cout << max[0];
}
Я думаю, что вам нужно вернуть истину в isPalindrome
после сравнения полной строки. т.е. return true;
должен быть снаружи for
петля
И для проверки самого большого 3-значного палиндрома, почему вы проходите int pal = i*j;
т.е. для первой итерации 999*999
, Проверь это
bool isPalindrome(int x) {
string str = to_string(x);
string pal = str;
std::reverse(pal.begin(),pal.end());
if(pal == str) {
return true;
}else {
return false;
}
}
Других решений пока нет …