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

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

Войти
Регистрация
Восстановить пароль
 
zx spectrum
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 6
#1

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

12.10.2012, 12:35. Просмотров 842. Ответов 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++):

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

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

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

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

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

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

6
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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 или определение столкновений - C++
Решил таки написать физику дня небольшой игрушки, начал с малого и тут же закончил) имеется массив с координатами отрезков и некая точка в...

определение местоположения роутера с использованием 3х устройств или 3х замеров - C++
Определение местоположения роутера при помощи 3х устройств. Задание при исходных данных очень простое. Но как получить расстояния от...

Полиндром или нет? - C++
#include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;Russian&quot;); bool otvet; int i;...

C++11 в production, да или нет? - C++
Всем привет. Выбил все-таки разрешение юзать С++11 на работе, по мелочи, лямбды вместо предикатов, range-based-for, auto. Сегодня наш тех....


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

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

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