Все числа палиндромов от 1 до 100 000 в переполнении стека

Я пытаюсь выяснить, что не так с этим маленьким кусочком кода, он должен печатать все числа палиндромов от 1 до 100 000 (я знаю, что их много). Я новичок здесь, и я думаю, что это может быть простым решением, но я не могу понять это, спасибо.

Когда я запускаю программу, она просто выдает: «100000 не палиндром ……………………………. ………………………………………….. ………………»

(предполагается печатать числа вроде: 111, 121, 131, 141 ….. до 100000)

#include<stdio.h>
#include<conio.h>

int main()
{
int n=0, reverse = 0, temp=0, i=0;
n=100000;
for(i=1; i<n; i++)
{
temp = i;
while( temp != 0 )
{
reverse = reverse * 10;
reverse = reverse + temp % 10;
temp = temp/10;
}

if( i == reverse )
printf("%d", n);
else
printf(".");
}
getch();
return 0;
}

-1

Решение

У вас есть 2 очевидных дефекта в вашем коде:

  1. Вы не очищаете reverse перед каждой итерацией, так что значения из предыдущих итераций накапливаются и нарушают алгоритм.
  2. В printf вы должны вывести текущий проверенный номер, а не n,

Еще один современный модный стиль C ++ намеки:

  1. Объявите переменные настолько локально, насколько это возможно. Вы можете объявить их внутри цикла, серьезно! Например. temp а также reverse должны быть объявлены прямо перед while, i должны быть объявлены внутри for() заявление.
  2. использование *=, -=, += вместо =:

    reverse *= 10;
    reverse += temp % 10;
    temp /= 10;
    
  3. использование std::cout вместо «старого доброго С» printf()
2

Другие решения

В режиме отладки переверните число во второй раз и подтвердите, что при обратном обращении вы вернетесь к тому же номеру.

int reverse = doReverse( temp );
assert( temp == doReverse( reverse ));

Вы найдете свою ошибку.

0

#include <iostream>
#include <algorithm>
#include <sstream>

using namespace std;

int main(int argc, char* argv[] )
{
string lStr;

for (int lIter = 1; lIter <= 100000; ++lIter ) {
stringstream lStrS;
lStrS << lIter;
lStr = lStrS.str();

string lRevStr = lStr;
reverse( lRevStr.begin(), lRevStr.end() );

if ( lRevStr == lStr ) {
cout << lStr << endl;
}
}

}

Это пример одного из способов сделать это.

0
По вопросам рекламы [email protected]