Дано натуральное n. Определить, является ли это число палиндромом

217
25 марта 2019, 11:20

Вот мой код, но я не знаю, что делать дальше... Как мне дописать этот код, не используя массивы, указатели, строки и тому подобное... Эта задача должна решаться как-то с помощью цикла.

#include <iostream>
#include <locale>
#include <cmath>
using namespace std;
int main()
{
setlocale(0, "rus");
int n, sum(0);
double i(0.0);
begin: cout << ("Введите натуральное число n: ") << endl;
cin >> n;
if (n < 0) goto begin;
int copy_n1 = n;
while (copy_n1 > 0)
{
    copy_n1 /= 10;
    ++i;
}
int copy_n2 = n;
const int copy_i = i;
for (int k = 0; k < copy_i; ++k)
    {
    i -= 1.0;
    double a = pow(10.0, i);
    int y = copy_n2 % int(a);
    /////// а дальше я не знаю, как делать
    }
cout << sum << endl;
system("pause");
return 0;
}
Answer 1

Желательно использовать рекурсивную функцию. Для упрощения решения проблемы можно использовать строковое представление данных. Предлагаю вариант использования нерекурсивной функции, данную вещь можно просто в main использовать.

#include <iostream>
using namespace std;
int reverse_number(int number)
{
    int n = 0;
    while(number)
    {
        n = 10*n + number%10;
        number /= 10;
    }
 return n;
}

int main()
    cout << "input number: ";
    int number;
    cin >> number;
    if (number == reverse_number(number))
    cout << number << " This is palindrom" << endl;
    else
        cout << "NO " << endl;
    return 0;
}

не забудь прописать setlocate и так далее.

Совет

не используй go to - усложняет восприятие кода и качество кода, посторайся обходится без него

Answer 2

Ну вот, например

#include <iostream>
#include <string>

using namespace std;

int main() {
  setlocale(0, "rus");
  cout << "Введите число: ";
  string num, rnum;
  getline(cin, num);
  rnum = num;
  _strrev(const_cast<char*>(rnum.c_str()));
  cout << ((num == rnum) ? "Это палиндром!" : "Это не палиндром...");
  return 0;
}

Вот вам вариант без строк. Могли бы и сами переделать, кстати - там легко разобраться, переделки чисто косметические.

#include <string>
#include <stdio.h>

int main() {
  setlocale(0, "rus");
  printf("Введите число: ");
  char num[80], rnum[80];
  gets_s(num, sizeof(num));
  strcpy_s(rnum, sizeof(rnum), num);
  _strrev(rnum);
  printf(strcmp(num, rnum) == 0 ? "Это палиндром!" : "Это не палиндром...");
  return 0;
}
READ ALSO
горячая клавиша для создания скелета в коде

горячая клавиша для создания скелета в коде

Не знаю как написать горячую клавишу, чтобы при нажатии определенной кнопки, когда пишешь код, вставлялся цикл, чтобы не прописывать его (тобишь...

226
build/Debug/MinGW-Windows/main.o Error 1 при сборке cpp в NetBeans

build/Debug/MinGW-Windows/main.o Error 1 при сборке cpp в NetBeans

Я установил NetBeans, MinGW, написал для теста код, он отказывается собиратьсяKод:

141
Компиляция QT 5.11 на Raspberry Pi 3

Компиляция QT 5.11 на Raspberry Pi 3

Raspberry Pi идет в комплекте с QT 53 и QT Creator 3

204