Форум программистов, компьютерный форум CyberForum.ru

Палиндром или нет? - C++

Восстановить пароль Регистрация
 
velikrjn
10 / 10 / 4
Регистрация: 02.12.2011
Сообщений: 55
17.09.2012, 22:21     Палиндром или нет? #1
Определить, является ли заданное натуральное число палиндромом, т.е.
таким, десятичная запись которого читается одинаково слева направо и
справа налево (например: 30303, 1441).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
17.09.2012, 22:43     Палиндром или нет? #2
velikrjn, числов строку преврати, и анализируй!
Разбиваеш строку на 2. вторую инвертируеш и сравниваеш. если равны, то ок.
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
17.09.2012, 22:53     Палиндром или нет? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<iostream>
 
using namespace std;
 
int counter(int a)
{
    int count = 0;
    while(a>0)
    {
        count++;
        a/=10;
    }
    return count;
}
 
int *getPal(int a, int count)
{
    int *palmass = new int[16];
    for(int i=count; i>=0; i--)
    {
        palmass[count-i] = a%10;
        a/=10;
    }
    return palmass;
}
 
void main()
{
    setlocale(LC_ALL, ".1251");
    int a;
    cin>>a;
    int count = counter(a);
    int* palmass = getPal(a, count);
    bool result = false;
    for(int i=0; i<count; i++)
    {
        if(i<count/2)
            if(palmass[i] != palmass[count-1-i]) break;
            else continue;
        if(count%2 == 0)
            if(palmass[i] == palmass[i+1]) result = true; else {result = false; break;}
        result = true;
    }
    for(int i=0; i<count; i++)
        cout<<palmass[i];
    cout<<'\n';
    cout<<result<<' '<<count;
    system("pause");
}
AnreyKazakov
Заблокирован
18.09.2012, 10:14     Палиндром или нет? #4
Ну, дорвался до компа, вчера эту задачу видел, но планшет только был. а он исключительно для игр....
В общем решил, ура =)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <cstring>
using std::cout; using std::cin; using std::endl; using std::string;
int main(){
    cout<<"Введите слово\\число"<<endl;
    string str;
    cin>>str;
    string::size_type ends=str.size();
    char* q = new char[ends];
    strcpy(q,str.c_str());
    bool key=0;
    for(string::size_type k=0;k!=(ends/2);++k){if(q[k]!=q[ends-1-k])key=1;}
    cout<<(key?"не палиндром":"палиндром")<<endl;
    return 0;
    }
Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
18.09.2012, 11:21     Палиндром или нет? #5
AnreyKazakov, ну тогда уж ТАК

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
bool palindrom_check(const char* num)
{
string str (num);
return equal(str.begin(),str.begin()+str.size()/2,str.rbegin());
}
 
int main()
{
cout<<boolalpha<<palindrom_check("45654")<<"\n";
cout<<palindrom_check("1234567")<<"\n";
cout<<palindrom_check("123454321")<<"\n";
cout<<palindrom_check("1234567890987654321")<<"\n";
 
}
-=ЮрА=-
Заблокирован
Автор FAQ
18.09.2012, 11:40     Палиндром или нет? #6
А что без строк никак?
Ниже вариант с разбором именно цифр числа а не символов строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <vector>
#include <iostream>
using namespace std;
 
int main()
{
    int val   = 0;
    int digit = 0;//áóäåò õðГ*Г*ГЁГІГј îòäåëüГ*ГіГѕ öèôðó Г·ГЁГ±Г«Г*
    vector<int> digits;//âåêòîð Г± öèôèðÿìè Г·ГЁГ±Г«Г*
    while(true)
    {
        digits.clear();
        cout<<"Enter val : ";cin>>val;
        for(digit = val % 10; 0 < val; digit = val % 10)
        {
            digits.push_back(digit);
            val = val / 10;
        }
        int isPalindrom = 1;
        int nDigits = digits.size();
        for(int i = 0; i < (nDigits / 2) && isPalindrom; i++)
            isPalindrom = (digits[i] == digits[(nDigits - 1) - i]);
        if(isPalindrom)
            cout<<"Input number is palindrom\n";
        else
            cout<<"Input number is not palindrom\n";
    }
    return 0;
}
Миниатюры
Палиндром или нет?  
Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
18.09.2012, 11:45     Палиндром или нет? #7
-=ЮрА=-, а что без вектора никак?
ну и Юра, это же С++, что за циклы торчащие наружу. Где красота, скорость, удобство
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
18.09.2012, 11:53     Палиндром или нет? #8
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
   int n = 303031, m = 0; 
   for (int tmp = n; tmp; tmp/=10) m = m*10 + tmp%10;
   std::cout << std::boolalpha << (n==m);
   return 0;
}
Добавлено через 28 секунд
Цитата Сообщение от Pure Посмотреть сообщение
Где красота, скорость, удобство
Такой вариант сойдет?)
Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
18.09.2012, 11:55     Палиндром или нет? #9
Dani, только если будет обрабатывать числа любой величины
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
18.09.2012, 11:56     Палиндром или нет? #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
 
bool isPalindrome( int val ) {
   int tmp1 = 0,
       tmp2 = val;
 
   while ( val ) {
      tmp1 = tmp1 * 10 + val % 10;
      val /= 10;
   }
   
   return ( tmp1 == tmp2 );
}
 
int main() {
   int value;
 
   std::cout << "Enter value: ";
   std::cin >> value;
 
   if ( isPalindrome( value ))
      std::cout << "Is palindrome. " << std::endl;
   else
      std::cout << "Is not palindrome." << std::endl;
 
   return 0;
}
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
18.09.2012, 11:57     Палиндром или нет? #11
Pure, ТС не упоминал про длинные числа.
-=ЮрА=-
18.09.2012, 11:59
  #12

Не по теме:

Pure, вместо "парить строку" покажи человеку как число на разряды разбивать, умник. И мой совет будь потише - явными знаниями ты тут не блещишь а вот понтов много, как у великого

Dani
18.09.2012, 12:00
  #13

Не по теме:

попой чувствую, щас холивар начнется.

-=ЮрА=-
18.09.2012, 12:01
  #14

Не по теме:

Dani, твой вариант мне понравился

Цитата Сообщение от Dani Посмотреть сообщение
for (int tmp = n; tmp; tmp/=10) m = m*10 + tmp%10;
, правда я ещё не тестил но внешне симпатично...

Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
18.09.2012, 12:08     Палиндром или нет? #15
хорошо хорошо. Я просто хотел поучаствовать и предложил, на мой взгляд, неплохой вариант решения средствами С++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2012, 21:41     Палиндром или нет?
Еще ссылки по теме:

Полиндром или нет? C++
C++ Вывести на экран слова, в которых все символы повторяющиеся, или сообщение «Нет», если требуемых слов нет
C++11 в production, да или нет? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
velikrjn
10 / 10 / 4
Регистрация: 02.12.2011
Сообщений: 55
26.09.2012, 21:41  [ТС]     Палиндром или нет? #16
Люди, всем спасибо =)
За основу взял прогу Dani немного переписав =)
Yandex
Объявления
26.09.2012, 21:41     Палиндром или нет?
Ответ Создать тему
Опции темы

Текущее время: 20:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru