Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 01.02.2017, 14:41   #1
raider21
Новичок
Джуниор
 
Регистрация: 01.02.2017
Сообщений: 3
Вопрос [C] Объяснить код код для определения пятизначного палиндром числа

Всем привет! Помогите пожалуйста объяснить с 20-ой строки firstDigit=temp1/10000; и до fifthDigit=temp1;, а конкретнее почему делят и используют remainder с цифрами 10000;1000;100???? Это код для определения пятизначного палиндром числа.Спасибо за внимание.
Код:
#include <iostream>
using namespace std;
int main()
{
	int number;
	int temp1;
	int temp2;
	int firstDigit;
	int secondDigit;
	int fourthDigit;
	int fifthDigit;

	printf("Enter a five-digit number: ");
	scanf("%d",&number);

	temp1=number;


	firstDigit=temp1/10000;
	temp2=temp1%10000;

	secondDigit=temp2/1000;
	temp1=temp2%1000;

	temp2=temp1%100;

	fourthDigit=temp2/10;
	temp1=temp2%10;

	fifthDigit=temp1;

	if(firstDigit==fifthDigit){
		if(secondDigit==fourthDigit){
			printf("%d is a palindrome\n",number);
		}
		else {
			printf("%d is not a palindrome\n",number);
		}
	}
	else
	{
		printf("%d is not a palindrome\n",number);
	}
	system("pause");
	return 0;
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 01.02.2017 в 14:55.
raider21 вне форума Ответить с цитированием
Старый 01.02.2017, 14:59   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от raider21 Посмотреть сообщение
а конкретнее почему делят и используют remainder с цифрами 10000
делением получают первую цифру пятизначного числа

Цитата:
Код:
temp2=temp1%10000;
в temp2 получают число уже без первой цифры (последние 4-ре цифры числа)


Цитата:
Код:
secondDigit=temp2/1000;
	temp1=temp2%1000;
secondDigit - получаем вторую цифру исходного числа (первая цифра в оставшемся четырёхзначном, которое получили на предыдущем шаге в temp2

temp1 - остаток - это уже трёхзначное число

и т.д.


p.s. кстати, данный код не красивый (много лишних переменных) и не универсальный (рассчитан только на пятизначные числа).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.02.2017, 15:09   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Мне кажется, что пропустили деление на "100":
Код:
secondDigit=temp2/100;
А ну запусти программу и проверь результаты на каком-нибудь контрольном примере.
ura_111 вне форума Ответить с цитированием
Старый 01.02.2017, 15:19   #4
raider21
Новичок
Джуниор
 
Регистрация: 01.02.2017
Сообщений: 3
По умолчанию

Ясно.Благодарю
raider21 вне форума Ответить с цитированием
Старый 01.02.2017, 15:22   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Мне кажется, что пропустили деление на "100":
Код:
secondDigit=temp2/100;
Юра, не запутываете человека, он и сам запутается!
Вы ошибаетесь. ничего там на 100 делить НЕ НАДО.
(деление на 100 может дать ТРЕТЬЮ цифру числа.
она находится в середине, поэтому для проверки, является ли число палиндромом, эта цифра НЕ НУЖНА.
поэтому она и не извлекается из числа).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.02.2017, 15:48   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А да, всё правильно.


Хорошая программа; самое главное рабочая. Тогда пояснения:

1) Пусть "temp1= 65432".
Когда ты делишь "firstDigit=temp1/10000;", то "firstDigit" должен равняться по идеи "6,5432" (но это число вещественное - тип "float"), а у тебя "int firstDigit". В результате происходит конфликт типов и компилятор (не долго думая) просто делает "неявное преобразование типа float в int", - в результате отбрасывается дробная часть и "firstDigit=6".

p.s.: вообще то, есть в Си возможность и "явного преобразования типов":
Код:
 ...=int (float) ...
2) Напомню "temp1= 65432"; а конструкция:
Код:
"temp2=temp1%10000;"
помещает в "temp2" ОСТАТОК ОТ ДЕЛЕНИЯ 65432 на 10000, т.е. "temp2= 5432" (ну вот смотри: делим 65432 на 10000= 6*10000+5432. Число "5432" называется "остаток от деления числа 65432 на 10000").

Всё, принципы ты понял (в программе работают только эти два принципа), - теперь пробегись по коду (это надо для усвоения материала) и напиши на бумажке что происходит с переменными на каждом шаге (возьми для примера число "number= 65432").

.

Последний раз редактировалось ura_111; 01.02.2017 в 16:16.
ura_111 вне форума Ответить с цитированием
Старый 01.02.2017, 16:00   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Кстате, можно обойтись одно переменной "temp1", а "temp2" не нужна:
Код:
	temp1 = number;
	
	firstDigit = temp1 / 10000;
	temp1 = temp1 % 10000;

	secondDigit = temp1 / 1000;
	temp1 = temp1 % 1000;

	temp1 = temp1 % 100;

	fourthDigit = temp1 / 10;
	temp1 = temp1 % 10;

	fifthDigit = temp1;
ura_111 вне форума Ответить с цитированием
Старый 01.02.2017, 17:23   #8
raider21
Новичок
Джуниор
 
Регистрация: 01.02.2017
Сообщений: 3
По умолчанию

ok da uje razobralsya,spasibo rebyata
raider21 вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объяснить код программы Morreaw Помощь студентам 0 09.06.2015 09:11
Компонент TColorButton, объяснить код (Delphi) MIXER_ok Помощь студентам 2 13.11.2012 07:30
объяснить код на Delphi за WMR HelpMeGiveWmr Фриланс 8 15.01.2012 23:47
как грамотно объяснить код (делфи 7) MegaMozg28 Помощь студентам 0 10.06.2010 13:23
Срочно!Нужно объяснить код программ! ArcaN0id Помощь студентам 1 28.06.2009 11:15


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS