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

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

Восстановить пароль Регистрация
 
K_arina
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 34
29.09.2016, 11:55     Является ли число палиндромом #1
Алгоритм проверки числа должен быть именно такой (так поставили задачу)
Но он работает некорректно.

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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GbaLog-
Не Эксперт C++
1527 / 631 / 176
Регистрация: 24.08.2014
Сообщений: 2,549
Записей в блоге: 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-
Не Эксперт C++
1527 / 631 / 176
Регистрация: 24.08.2014
Сообщений: 2,549
Записей в блоге: 1
Завершенные тесты: 2
29.09.2016, 18:41     Является ли число палиндромом #4
K_arina, В чём компилируете?
nmcf
4315 / 3736 / 1260
Регистрация: 14.04.2014
Сообщений: 14,642
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-
Не Эксперт C++
1527 / 631 / 176
Регистрация: 24.08.2014
Сообщений: 2,549
Записей в блоге: 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
4315 / 3736 / 1260
Регистрация: 14.04.2014
Сообщений: 14,642
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, Спасибо, уже все поняла и уяснила для себя. До меня просто не с первого раза доходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2016, 20:56     Является ли число палиндромом
Еще ссылки по теме:

Проверить, является ли заданное четырёхзначное число палиндромом C++
Выяснить является ли палиндромом четырехзначное число. C++
Является ли число палиндромом C++

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

Или воспользуйтесь поиском по форуму:
iJustLife
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 41
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;
}
Yandex
Объявления
29.09.2016, 20:56     Является ли число палиндромом
Ответ Создать тему
Опции темы

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