С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
#1

Объяснить работу программы - C++

02.06.2014, 07:30. Просмотров 542. Ответов 13
Метки нет (Все метки)

Здравствуйте. Такая задача была:
Задача 2. Дано натуральное число. Определить, является ли число палиндромом, т.е. читается одинаково слева направо и справа налево. Массивы и строки не использовать.
Нашёл на форуме подходящую рабочую программу, но не могу полностью понять (и объяснить), как она работает. Вроде в цикле с предусловием аналоги mod/div, а в цикле с параметром что - не понятно. Прошу объяснить работу программы полностью.
C++ (Qt)
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int        a, d, m, n, f = 0;
 
    
cin >> d;
 
    for ( a = d, m = n = 1; a /= 10; m *= 10, n++ );
 
    a = d;
    n /= 2;
    while ( n-- ) {
        f |= ((d / m) % 10) ^ (a % 10);
        m /= 10;
        a /= 10;
    }
 
    cout << (!f ? "Yes" : "No") << endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2014, 07:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объяснить работу программы (C++):

Объяснить работу программы - C++
Во введенном слове подсчитать количество различных пар букв. Например, в слове babacabacd 5 различных пар букв, ba – 3 пары, ac – 2 пары. ...

Рекурсия, объяснить работу программы - C++
Вообщем мое ( пока самостоятельное ) обучение продолжается и попал я вот на такую замечательную тему как: &quot;рекурсия&quot;. вообщем все действия...

Прошу объяснить работу готовой программы - C++
Что требуется: При описании решения задачи следует отдельно выделить постановку задачи с указанием входных и выходных данных и метод...

Объяснить работу программы (структуры, файловый ввод/вывод) - C++
объясните программу чему равняется v0??? и зачем int v=111??? #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using...

Объяснить работу программы (нахождение простых чисел, решето Эратосфена) - C++
Поясните как работает эта прога а именно : #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { ...

Объяснить работу кода - C++
Подскажите пожалуйста как работает этот код при F(9). На экран выводит 131159, но как это происходит? void F(int n) { if (n &gt; 0) ...

13
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.06.2014, 07:38 #2
yaStudent, число делится на две части и идет сравнение цифр старшего разряда с цифрами младшего разряда.
1
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
02.06.2014, 08:09  [ТС] #3
Tulosba, типа:
1234321
1=1
2=2
3=3
4=4
?

Для чего тогда два цикла?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.06.2014, 11:30 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
yaStudent, первый цикл для определения длины (кол-ва цифр) числа.
0
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
02.06.2014, 11:57  [ТС] #5
Tulosba, ок. Спасибо за ответ. =)
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,246
02.06.2014, 12:13 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
можно и одним циклом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int n=0;
cin >> d;
int m=d;
// переворачиваем число
while(m)
{
  n*=10;
  n+=m%10;
  m/=10;
}
// в n перевернутое число
 
if(n==d)
 // Да   
else
 // нет
смысл в том что сравниваем обычное и перевернутое число
123 ==321 нет значит не палиндромом
12321==12321 Да значит палиндромом
1
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
02.06.2014, 13:05  [ТС] #7
ValeryS, тоже работает, спасибо. =)
0
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
04.06.2014, 07:17  [ТС] #8
Не принимают, требуются более подробное описание, описание метода решения задачи.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.06.2014, 15:06 #9
Цитата Сообщение от yaStudent Посмотреть сообщение
требуются более подробное описание
И в чем проблема? Какие-то строки не ясны?
0
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
04.06.2014, 16:17  [ТС] #10
Tulosba,
При описании решения задачи следует отдельно выделить постановку задачи с указанием входных и выходных данных и метод решения задачи
Ну, входные данные - число. Выходные - Yes или No. Метод решения, как я понял, - сравнение цифр старшего разряда с цифрами младшего разряда. Но не принимают и написали такой вот ответ.
0
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
08.06.2014, 22:58  [ТС] #11
ValeryS, можно ли объяснить, что вот это за вычисления?
{
n*=10;
n+=m%10;
m/=10;
}
Как мне их математически записать?
n=n*10
n=n+m*10%
m=m/10
?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.06.2014, 23:02 #12
yaStudent, во втором случае только напутали чего-то.
C++
1
n=n+m%10
1
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
08.06.2014, 23:08  [ТС] #13
Tulosba, в математике ни разу не видел такого. =О Может тогда n=n+m%*10
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,246
08.06.2014, 23:18 #14
Цитата Сообщение от yaStudent Посмотреть сообщение
m%*10
знак процента в программировании это не проценты а остаток от деления
C++
1
2
3
4
5
6
while(m) // крутим цикл пока m не равно 0
{
 n*=10;  // умножаем  n на 10
 n+=m%10;// добавляем  к  n последнюю цифру m( остаток от деления на 10)
 m/=10;// делим m на 10
}
1
08.06.2014, 23:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 23:18
Привет! Вот еще темы с ответами:

Объяснить работу функции - C++
Может кто объяснить работу функции void zagalovok() { Node *t; head=new Node(); t=head; int V; cout&lt;&lt;&quot;Введите...

Объяснить работу конструктора - C++
простите за тупое название темы Добрый вечер, возникла проблема в изучении деструкторов целом проблема не самое в деструкторов, а в...

Объяснить работу кода - C++
Объясните что происходит в данном коде #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include&lt;cmath&gt; int _tmain(int argc, _TCHAR*...

Объяснить работу Memcpy - C++
Доброго времени суток! Можете пояснить работу memcpy под C++? Что-то у меня определённо работает не так. Например такой код: ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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