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

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

Восстановить пароль Регистрация
 
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
02.06.2014, 07:30     Объяснить работу программы #1
Здравствуйте. Такая задача была:
Задача 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.06.2014, 07:38     Объяснить работу программы #2
yaStudent, число делится на две части и идет сравнение цифр старшего разряда с цифрами младшего разряда.
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
02.06.2014, 08:09  [ТС]     Объяснить работу программы #3
Tulosba, типа:
1234321
1=1
2=2
3=3
4=4
?

Для чего тогда два цикла?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.06.2014, 11:30     Объяснить работу программы #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
yaStudent, первый цикл для определения длины (кол-ва цифр) числа.
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
02.06.2014, 11:57  [ТС]     Объяснить работу программы #5
Tulosba, ок. Спасибо за ответ. =)
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
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 Да значит палиндромом
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
02.06.2014, 13:05  [ТС]     Объяснить работу программы #7
ValeryS, тоже работает, спасибо. =)
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
04.06.2014, 07:17  [ТС]     Объяснить работу программы #8
Не принимают, требуются более подробное описание, описание метода решения задачи.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.06.2014, 15:06     Объяснить работу программы #9
Цитата Сообщение от yaStudent Посмотреть сообщение
требуются более подробное описание
И в чем проблема? Какие-то строки не ясны?
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
04.06.2014, 16:17  [ТС]     Объяснить работу программы #10
Tulosba,
При описании решения задачи следует отдельно выделить постановку задачи с указанием входных и выходных данных и метод решения задачи
Ну, входные данные - число. Выходные - Yes или No. Метод решения, как я понял, - сравнение цифр старшего разряда с цифрами младшего разряда. Но не принимают и написали такой вот ответ.
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
?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.06.2014, 23:02     Объяснить работу программы #12
yaStudent, во втором случае только напутали чего-то.
C++
1
n=n+m%10
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
08.06.2014, 23:08  [ТС]     Объяснить работу программы #13
Tulosba, в математике ни разу не видел такого. =О Может тогда n=n+m%*10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 23:18     Объяснить работу программы
Еще ссылки по теме:

Объяснить результат и работу указанных строк C++
Объяснить результат и работу указанных строк C++
Объяснить работу Memcpy C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
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
}
Yandex
Объявления
08.06.2014, 23:18     Объяснить работу программы
Ответ Создать тему
Опции темы

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