Программа чисел палиндрома в C - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь создать программу на C, которая определяет, является ли пятизначное целое число палиндромом или нет.Часть, с которой я борюсь, не использует цикл, поскольку я знаю, как сделать это с помощью цикла.Тем не менее, я должен делать это без такового, и вместо этого использовать вложенные операторы if else некоторых типов.Я разобрался, как поменять 3-значное число, а не 5, а затем перейти оттуда.Вот что у меня так далеко.Я только учусь, так что это немного сложнее.

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
    int a, b, c, d, e , num, reversed;
    cout << "\n Enter a five digit number";
    cin >> num;
    a = num / 100;
    b = (num % 100) / 10;
    c = num % 10;
    d = num % 10;
    e = num % 10;
    reversed = 100 * c + 10 * b + a;
    cout << " " << reversed;
    return 0;
}

Опять же, я не могу заставить его работать на 5 цифр, но я предполагаю, что после этого, используя операторы if else, я могу связать обратное и исходное число с%, чтобы увидеть, является ли это палиндромом.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Это потому, что в вашей переменной num нет изменений в следующих инструкциях:

c = num % 10;
d = num % 10;
e = num % 10;

Вы вообще не обновляете num и, следовательно, значения переменных c, d и e одинаковы.Следовательно, после получения одного модуля вы должны разделить переменную num на 10, а также переместить одну цифру назад.

a = num % 10;  // get the last digit of num
num /= 10;     // update the last digit (num reduced by 1 digit, '12345' will become '1234')
b = num % 10;
num /= 10;
c = num % 10;
num /= 10;
d = num % 10;
num /= 10;
e = num % 10;

cout << a << b << c << d << e << endl;

Поскольку вы печатаете только обратное число в своем коде, вам не нужнопостроить обратное число снова.Но если вы это сделаете, это будет довольно тривиально, когда у вас есть цифры.

reversed = 10000 * a + 1000 * b + 100 * c + 10 * d + e;

Я полагаю, вы можете проверить, является ли число палиндромом или нет (isPalindrome = (reversed == num)).

0 голосов
/ 07 февраля 2019

Вы должны использовать цикл, если хотите, чтобы решение было разумным.И вы должны использовать указатели, если хотите, чтобы решение было универсальным (с помощью пары изменений вы можете адаптировать проверку палиндрома к любому слову / фразе, поскольку палиндромы не являются только числами).Примерно так:

#include <iostream>
#include <sstream>
#include <cstring>

using namespace std;

int main()
{
    unsigned long long int num;
    cout << "\n Enter integer:\n";
    cin >> num;
    std::stringstream ss;
    ss << num;
    const char * itss = ss.str().c_str(); 
    const char * ites = itss + strlen(itss) - 1;
    int is_palindrome = 1;
    while (itss <= ites) {
     if (*itss != *ites) {
      is_palindrome = 0;
      break;
     }
     itss++;
     ites--;
    }
    cout << "your number is " << (is_palindrome ? "a palindrome" : "NOT a palindrome") << "\n";

    return 0;
}
0 голосов
/ 07 февраля 2019
num = numInput;

a = num % 10; num /= 10;
b = num % 10; num /= 10;
c = num % 10; num /= 10;
d = num % 10; num /= 10;
e = num % 10;

reversed = ((((( a * 10) + b ) * 10 + c ) * 10 + d ) * 10 ) + e;

isPalindrome = ( (numInput == reversed) ? 1 : 0 );

Или, если вам нужна некоторая "симметрия" кода (определенно не нужна):

rev = 0;
rev += a; rev *= 10;
rev += b; rev *= 10;
rev += c; rev *= 10;
rev += d; rev *= 10;
rev += e;

Но использование цикла намного лучше.

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