Консультация онлайн # 161121

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: юлия
Дата: 22.02.2009, 15:00 Консультация неактивна
Поступило ответов: 1
Здравствуйте, мне нужна помощь в решении вот такой задачи на паскаль.
N! − это произведение натуральных чисел от 1 до N (1 ≤ N ≤ 32767). Например, 7! = 5040. Требуется написать программу, которая по заданному N определит самую правую ненулевую цифру в записи N!
Пример входных данных: 7, пример выходных данных: 4.

Ответ # 1, Delph (Посетитель)

Здравствуйте, юлия!

В приложении один из вариантов решения задачи. Программа запрашивает входной параметр N, после чего проводит расчёт. После каждой операции умножения отбрасываются нули в правой части числа (если они есть). Поскольку факториал числа возрастает невероятно быстро, отбрасываются так же все значащие цифры, кроме самой правой - её вполне достаточно для получения требуемого результата. При необходимости можно вывести не только одну, но и несколько значащих цифр.

Желаю успехов!

Приложение:


Delph

Посетитель
22.02.2009, 15:46
Нет оценки ответа

Мини-форум консультации # 161121

Шевченко Дмитрий

177342

= общий =    22.02.2009, 17:21
причём надо брать именно несколько значащих цифр, около 5 (s:= s mod 100000), а при выводе использовать WriteLn('Последня цифра в факториале: ', s mod 10);
Иначе программа будет работать неправильно (проверьте например 15! = 1307674368000).
Delph

177375

= общий =    22.02.2009, 22:30
Шевченко Дмитрий, Вы указали на довольно странную особенность программы, спасибо. Вот только я не понимаю, из-за чего так происходит?
Шевченко Дмитрий

177416

= общий =    23.02.2009, 09:45
Я просто хотел тоже послать такой же ответ как и Вы, но случайно обнаружил, что на числах, кратных 15, она работает неправильно..
Происходит это потому что
15*2 = 30, т.е. последняя цифра 3, как и думает Ваша программа, но
15*12 = 180, т.е. последняя цифра 8..
А вот сколько цифр всё-таки надо запоминать я так и не понял.
Ведь получается так как важна не только последняя цифра, но и предпоследняя, то и она тоже должна быть правильной, но при этом
15*312 = 4680, т.е. уже получается что надо запоминать 3 цифры!
А так как важна и третья - она тоже должна быть правильной и т.д.... smile

В общем, такое впечатление, что в итоге тут придётся просто посчитать факториал (а 97!(что-то я перепутал), 147! и дальше - они уже длиннее 255 символов)...
Delph

177420

= общий =    23.02.2009, 10:08
Шевченко Дмитрий, да уж... Об эти числа любую голову сломать можно. Чтож, будем потихоньку обучаться smile Ещё раз благодарю Вас, что указали на эту особенность :)
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.