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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
K_arina
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 34
#1

Является ли число палиндромом - C++

29.09.2016, 11:55. Просмотров 322. Ответов 9
Метки нет (Все метки)

Алгоритм проверки числа должен быть именно такой (так поставили задачу)
Но он работает некорректно.

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
50
51
52
53
54
55
56
57
58
59
60
61
62
/ Число - палиндром
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
 
int func(int a); // эта функция считает к-во цифр в числе
 
bool palindrom(int a); // эта функция проверяет является ли число полиндромом
 
 
void main()
{
    int x;
    cout << "Enter your number ";
    cin >> x;
    
 
    func(x); // вызываем функцию определения к-ва цифр
    if (palindrom(x))
        
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    system("pause");
    
}
 
 
int func(int a) // эта функция считает к-во цифр в числе
{
    if (a == 0)
        return 0;
    else return 1 + func(a / 10); // рекурсивный вызов
}
 
bool palindrom(int a) // функция-проверка палиндрома
{
    int k = 0;
    int c = 0;
    int b = 0;
 
    k = func(a);
 
    c = a / (exp( int (10 * log(k - 1)))); // наибольший разряд (первое число)
 
    // x = pow (a,b), тогда справедливо: x = exp (b * ln(a))
 
    b = a % 10;  // наименьший разряд (последнее число)
    
    
    if (c == b)
    {
        return palindrom((a % int(exp(10 * log((k - 1)) / 10))));
    }
    // сначала находим остаток от деления числа на 10 в степени (к-во цифр - 1) - отбрасываем первую цифру числа, 
    // а потом делим число на 10 - отбрасываем последнюю цифру числа, у нас получилось укороченое слева и справа 
    // число на  один разряд, и уже к новому числу рекурсивно вызываем функцию palindrom
 
    
    // Вот здесь нужен, наверное, какой-то return, но я не знаю какой
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 11:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Является ли число палиндромом (C++):

Является ли число палиндромом - C++
Дано натуральное число n (n&gt;=9999). Является ли это число палиндромом (перевертышем) с учетом четырех цифр, как, например, числа 2222,...

Определить, является ли число палиндромом - C++
Если можно то плиз с коментариями, я ток новичёк в этой проге, заранее спс. 1) Переменной t присвоить значение true , если дата m,d,y...

Проверить, является ли число палиндромом (do/while) - C++
Проверить, будет ли введенное число палиндромом (например, палиндромом 1254521 - он читается с права на лево так же, как слева на право).

Определить, является ли число палиндромом - C++
Дано натуральное число n (n&lt;9999). Определить, является ли это число палиндромом (перевертышем) с учетом четырех цифр (например 2222,...

Определить, является ли число палиндромом - C++
Ввести с клавиатуры пятизначное число и определить, является ли оно палиндромом, т.е. одинаково читается в обоих направлениях (например,...

Определить, является ли число палиндромом - C++
Проверить истинность высказывания: «Данное четырехзначное число читается одинаково слева направо и справа налево »

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
GbaLog-
Любитель чаепитий
2710 / 1243 / 300
Регистрация: 24.08.2014
Сообщений: 4,449
Записей в блоге: 1
Завершенные тесты: 2
29.09.2016, 12:55 #2
K_arina, Тестил не долго, но вроде так работает.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Число - палиндром
#include <iostream>
#include <cmath>
using namespace std;
 
int func(int a); // эта функция считает к-во цифр в числе
 
bool palindrom(int a); // эта функция проверяет является ли число полиндромом
 
 
int main()
{
    int x;
    cout << "Enter your number ";
    cin >> x;
    
 
    func(x); // вызываем функцию определения к-ва цифр
    if (palindrom(x))
        
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    system("pause");
    
}
 
 
int func(int a) // эта функция считает к-во цифр в числе
{
    if (a == 0)
        return 0;
    else return 1 + func(a / 10); // рекурсивный вызов
}
 
bool palindrom(int a) // функция-проверка палиндрома
{
    if( a == 0 )
    {
        return true;
    }
    
    int k = 0;
    int c = 0;
    int b = 0;
 
    k = func(a);
 
    c = a / (static_cast<int>(pow(10.d,k - 1))); // наибольший разряд (первое число)
 
    // x = pow (a,b), тогда справедливо: x = exp (b * ln(a))
 
    b = a % 10;  // наименьший разряд (последнее число)
    
    
    if (c == b)
    {
        return palindrom((a % static_cast<int>(pow(10.d,k - 1))) / 10);
    }
    else
    {
        return false;
    }
    // сначала находим остаток от деления числа на 10 в степени (к-во цифр - 1) - отбрасываем первую цифру числа, 
    // а потом делим число на 10 - отбрасываем последнюю цифру числа, у нас получилось укороченое слева и справа 
    // число на  один разряд, и уже к новому числу рекурсивно вызываем функцию palindrom
 
    
    // Вот здесь нужен, наверное, какой-то return, но я не знаю какой
    return false;
}
K_arina
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 34
29.09.2016, 18:39  [ТС] #3
GbaLog-, у меня 17 ошибок:


C++
1
2
3
c = a / (static_cast<int>(pow(10.d, k - 1))); // наибольший разряд (первое число)
 
return palindrom((a % static_cast<int>(pow(10.d, k - 1))) / 10);

Ошибка 10 error C2146: синтаксическая ошибка: отсутствие "(" перед идентификатором "d"
Ошибка 1 error C2059: синтаксическая ошибка: неправильный суффикс для числа
Ошибка 12 error C2059: синтаксическая ошибка: )
и т.д.
GbaLog-
Любитель чаепитий
2710 / 1243 / 300
Регистрация: 24.08.2014
Сообщений: 4,449
Записей в блоге: 1
Завершенные тесты: 2
29.09.2016, 18:41 #4
K_arina, В чём компилируете?
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
29.09.2016, 18:42 #5
Убери d.
K_arina
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 34
29.09.2016, 18:51  [ТС] #6
Visual Studio Express 2013

Добавлено через 35 секунд
А что дает d?
И зачем нам static_cast?
GbaLog-
Любитель чаепитий
2710 / 1243 / 300
Регистрация: 24.08.2014
Сообщений: 4,449
Записей в блоге: 1
Завершенные тесты: 2
29.09.2016, 18:59 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
K_arina, Тогда просто уберите в строках 49 и 58 буквы d перед точками, то есть должно стать так:
C++
1
2
c = a / (static_cast<int>(pow(10., k - 1)));
return palindrom((a % static_cast<int>(pow(10., k - 1))) / 10);

Не по теме:

P.S. В компиляторе студии вообще литералы добавляли? На rextester'e g++ этот код ест, а vc++ не ест.



Добавлено через 2 минуты
Цитата Сообщение от K_arina Посмотреть сообщение
А что дает d?
Это литерал, который показывает компилятору, что это число типа double.
Цитата Сообщение от K_arina Посмотреть сообщение
И зачем нам static_cast?
Функция pow возвращает тип с плавающей точкой( double, long double, float ), а нам нужен тип int, поэтому мы приводим к типу int то, что вернет pow.
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
29.09.2016, 19:08 #8
K_arina, уже несколько человек предлагали решения. static_cast и у меня был. Что ещё обсуждать-то?
K_arina
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 34
29.09.2016, 19:23  [ТС] #9
nmcf, Спасибо, уже все поняла и уяснила для себя. До меня просто не с первого раза доходит.
iJustLife
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 59
29.09.2016, 20:56 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
int main()
{
    string s,s2;
    int i;
    cin>>s;
    for (i=0;s.length()>i;i++)
        s2=s[i]+s2;
    if (s==s2)
    cout<<"Good"; else
    cout<<"Error";
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2016, 20:56
Привет! Вот еще темы с ответами:

Является ли данное число палиндромом - C++
дано натуральное число выяснить есть ли данное число палиндромом #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; float...

Цикл: выяснить, является ли число палиндромом - C++
дано натуральное число. выяснить является ли оно палиндромом т.е числом десятичная запись которого читается слева на право и справа на лево

Проверить, действительно ли число является палиндромом - C++
Проверить истинность высказывания: «Данное четырехзначное число читается одинаково слева направо и справа налево». нужен код плз :)

Функция, определяющая, является ли число палиндромом - C++
Помогите написать программу с комментариями (Функции) Написать функцию, которая... определяет, является ли (неотрицательное) число...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.09.2016, 20:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru