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

Определение палиндром или нет - C++

Восстановить пароль Регистрация
 
zx spectrum
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 6
12.10.2012, 12:35     Определение палиндром или нет #1
Здравствуйте. Данна программа, которая определяет является ли число полиндромом или нет. Сижу разбираю код программы и не могу понять как в цикле b может стать равной a. По идее так и должно быть, что условие выполниться когда b равно a. Но ведь в цикле b всегда будет принимать значение из одной цифры. Например я загадал число 123. Перед выходом из цикла последнее значение b будет равно 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
#include <iostream>
using namespace std;
 
int main()
{
    int a; //Исходное число
    cin >> a; //Вводим его с клавиатуры
    int temp = a; //Объявляем временную переменную со значением исходного числа
 
    int b = 0; //Число перевернутое
 
    while (temp != 0)
    {
          b = b * 10 + temp % 10; //Переворачиваем число по цифрам
          temp /= 10; //Отбрасываем последнюю цифру
    }
 
    if (a == b)
          std::cout << "Палиндром!";
    else
          std::cout << "Fail :(";
    system ("pause");
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2012, 12:35     Определение палиндром или нет
Посмотрите здесь:

C++ симафор или нет?
C++ Реализация теста с да или нет
C++ Coding style или нет
C++ Палиндром или нет?
Ошибка с массивами, хотя формально её нет (похожи ли массивы или нет?) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
12.10.2012, 12:53     Определение палиндром или нет #2
C++
1
2
3
4
5
while (temp != 0)
 {
     b = b * 10 + temp % 10; //Переворачиваем число по цифрам
     temp /= 10; //Отбрасываем последнюю цифру
 }
Цитата Сообщение от zx spectrum Посмотреть сообщение
Но ведь в цикле b всегда будет принимать значение из одной цифры
Откуда такой вывод? b принимает значение одной цифры (последней цифры temp на каждой итерации) плюс то, что уже содержалось в b, помноженное на 10. Например, если вначале цикла b = 25, а temp = 41, то после b = b * 10 + temp % 10 - b = 251.
zx spectrum
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 6
12.10.2012, 13:09  [ТС]     Определение палиндром или нет #3
Цитата Сообщение от John Prick Посмотреть сообщение
C++
1
2
3
4
5
while (temp != 0)
 {
     b = b * 10 + temp % 10; //Переворачиваем число по цифрам
     temp /= 10; //Отбрасываем последнюю цифру
 }
Откуда такой вывод? b принимает значение одной цифры (последней цифры temp на каждой итерации) плюс то, что уже содержалось в b, помноженное на 10. Например, если вначале цикла b = 25, а temp = 41, то после b = b * 10 + temp % 10 - b = 251.
Я имею в виду при выходе из цикла, в этой программе. Значение b будет сотоять из одной цифры. Программа работает, но я не понимаю как это получается. (Я циклы изучаю второй день). Например я задал программе цифру 123.
В первом цикле - b = 3, temp = 12
Второй цикл b = 2, temp = 1
Третии цикл b= 1, temp = 0

И тут программа выходит из цикла со значением b=1. Или я неправильно считаю?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
12.10.2012, 13:20     Определение палиндром или нет #4
Цитата Сообщение от zx spectrum Посмотреть сообщение
Я имею в виду при выходе из цикла, в этой программе. Значение b будет сотоять из одной цифры.
Ну с какого перепугу из одной цифры?? Обясни, почему ты так думаешь?

Добавлено через 5 минут
Цитата Сообщение от zx spectrum Посмотреть сообщение
Например я задал программе цифру 123.
В первом цикле - b = 3, temp = 12
Второй цикл b = 2, temp = 1
Третии цикл b= 1, temp = 0
И тут программа выходит из цикла со значением b=1. Или я неправильно считаю?
Конечно не правильно!
Вот цикл:
C++
1
2
3
4
5
while (temp != 0)
 {
     b = b * 10 + temp % 10; //Переворачиваем число по цифрам
     temp /= 10; //Отбрасываем последнюю цифру
 }
Итак, вводим 123. Поехали.
Начальные установки: b = 0, temp = 123;
1) b = b * 10 + temp % 10 = 0 * 10 + 123 % 10 = 0 + 3 = 3;
temp /= 10 = 123 / 10 = 12 // только целая часть остаётся, так как temp типа int
2) b = b * 10 + temp % 10 = 3 * 10 + 12 % 10 = 30 + 2 = 32;
temp /= 10 = 12 / 10 = 1;
3) b = b * 10 + temp % 10 = 32 * 10 + 1 % 10 = 320 + 1 = 321;
temp /= 10 = 1 / 10 = 0;
temp == 0 - выходим из цикла. Получили b = 321. Чудо!
zx spectrum
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 6
12.10.2012, 13:23  [ТС]     Определение палиндром или нет #5
Цитата Сообщение от John Prick Посмотреть сообщение
Ну с какого перепугу из одной цифры?? Обясни, почему ты так думаешь?
Ну наверно потому что перед выходом из цикла переменная b имела значение 1. Значит после выхода из цикла, по условию a сравнивается с b. То есть программе это будет как 123==1. Правильно я думаю или нет?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
12.10.2012, 13:24     Определение палиндром или нет #6
Цитата Сообщение от zx spectrum Посмотреть сообщение
Ну наверно потому что перед выходом из цикла переменная b имела значение 1
На что спорим, что это не так?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2012, 13:29     Определение палиндром или нет
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
zx spectrum
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 6
12.10.2012, 13:29  [ТС]     Определение палиндром или нет #7
Цитата Сообщение от John Prick Посмотреть сообщение
Ну с какого перепугу из одной цифры?? Обясни, почему ты так думаешь?

Добавлено через 5 минут

Конечно не правильно!
Вот цикл:
C++
1
2
3
4
5
while (temp != 0)
 {
     b = b * 10 + temp % 10; //Переворачиваем число по цифрам
     temp /= 10; //Отбрасываем последнюю цифру
 }
Итак, вводим 123. Поехали.
Начальные установки: b = 0, temp = 123;
1) b = b * 10 + temp % 10 = 0 * 10 + 123 % 10 = 0 + 3 = 3;
temp /= 10 = 123 / 10 = 12 // только целая часть остаётся, так как temp типа int
2) b = b * 10 + temp % 10 = 3 * 10 + 12 % 10 = 30 + 2 = 32;
temp /= 10 = 12 / 10 = 1;
3) b = b * 10 + temp % 10 = 32 * 10 + 1 % 10 = 320 + 1 = 321;
temp /= 10 = 1 / 10 = 0;
temp == 0 - выходим из цикла. Получили b = 321. Чудо!
Все дошло теперь как программа считает. Я считал так (по примеру второй строки) b = b * 10 + temp % 10 =3*10+12%10= 42%10=2. Неправильно считал я. Спасибо за помощь!!
Yandex
Объявления
12.10.2012, 13:29     Определение палиндром или нет
Ответ Создать тему
Опции темы

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