Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
zx spectrum
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 6
#1

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

12.10.2012, 12:35. Просмотров 940. Ответов 6
Метки нет (Все метки)

Здравствуйте. Данна программа, которая определяет является ли число полиндромом или нет. Сижу разбираю код программы и не могу понять как в цикле 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2012, 12:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определение палиндром или нет (C++):

Палиндром или нет?
Определить, является ли заданное натуральное число палиндромом, т.е. таким,...

Rectangle - определение по координатам прямоугольник это или нет
Привет всем неравнодушным!) Думаю, задача не нова, но у меня вызвали...

Ошибка с массивами, хотя формально её нет (похожи ли массивы или нет?)
Всем доброго времени суток!) В общем имею такую великолепную чтуку, она должна...

Вывести на экран слова, в которых все символы повторяющиеся, или сообщение «Нет», если требуемых слов нет
Дана последовательность символов, состоящая из слов. Вывести на экран слова, в...

Как найти текст в файле и возвратить 0 или 1 в зависимости от того,найдено или нет?
bool fnd(char* fn,string stf) { string s; ifstream ifs(fn); while...

Вывести True или False в зависимости от того, имеют три заданных целых числа одинаковую четность или нет
Всем привет! Помогите, пожалуйста в решении задачи. Знаю, что задачи...

6
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 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.
0
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. Или я неправильно считаю?
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 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. Чудо!
0
zx spectrum
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 6
12.10.2012, 13:23  [ТС] #5
Цитата Сообщение от John Prick Посмотреть сообщение
Ну с какого перепугу из одной цифры?? Обясни, почему ты так думаешь?
Ну наверно потому что перед выходом из цикла переменная b имела значение 1. Значит после выхода из цикла, по условию a сравнивается с b. То есть программе это будет как 123==1. Правильно я думаю или нет?
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
12.10.2012, 13:24 #6
Цитата Сообщение от zx spectrum Посмотреть сообщение
Ну наверно потому что перед выходом из цикла переменная b имела значение 1
На что спорим, что это не так?
0
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. Неправильно считал я. Спасибо за помощь!!
0
12.10.2012, 13:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2012, 13:29
Привет! Вот еще темы с решениями:

Collision detection или определение столкновений
Решил таки написать физику дня небольшой игрушки, начал с малого и тут же...

Определение, все ли число состоит из цифр 4 или 7
Поправьте пожалуйста. Задание: Написать код, который определяет, все ли число...

определение местоположения роутера с использованием 3х устройств или 3х замеров
Определение местоположения роутера при помощи 3х устройств. Задание при...

Правильно или нет?
Написал программу про институт. Где я вношу в список студентов и повышаю или...


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

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

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