Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2008, 18:27   #1
Doom4eg
Пользователь
 
Аватар для Doom4eg
 
Регистрация: 09.01.2008
Сообщений: 30
Вопрос Задача не из легких

Подскажыте как решеть такую задачу.
Найти послед. цыфру в числе n!(n<=32000). Но если последняя - 0, то показать перед послед.
Пример
Вход: 5
Выход: 2
Doom4eg вне форума Ответить с цитированием
Старый 13.11.2008, 18:39   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Вычисляй факториал, переводи результат в строку и обращайся к ней, как к массиву символов...
_Dmitry вне форума Ответить с цитированием
Старый 13.11.2008, 18:42   #3
Doom4eg
Пользователь
 
Аватар для Doom4eg
 
Регистрация: 09.01.2008
Сообщений: 30
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
Вычисляй факториал, переводи результат в строку и обращайся к ней, как к массиву символов...
Ты считаеш что ето быстрый метод решения задачи?
Doom4eg вне форума Ответить с цитированием
Старый 13.11.2008, 18:44   #4
Doom4eg
Пользователь
 
Аватар для Doom4eg
 
Регистрация: 09.01.2008
Сообщений: 30
Сообщение

Думаю должен быть интересный мат. подход к етой задачке!
Doom4eg вне форума Ответить с цитированием
Старый 13.11.2008, 18:54   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,543
По умолчанию

А если обе последние цифры 0, то показать пред пред последней или все равно последнюю (т.е. 0)?
Если разложить N! на множители, то получим:
2*3*4*5*6*7*8*9*10*11*12*13*...*N = (2*5)*10*3*4*6*7*8*9*11*12*13*...*N = 10*10*3*4*6*7*8*9*11*12*13*...*N = 100*3*4*6*7*8*9*11*12*13*...*N
Т.е. 5! и выше всегда будет иметь последнюю цифру 0, а 10! и выше всегда два 0 в конце.
А если так, то решение вообще тривиальное.

Цитата:
Вычисляй факториал, переводи результат в строку и обращайся к ней, как к массиву символов...
Хорошая шутка
Arigato вне форума Ответить с цитированием
Старый 13.11.2008, 19:13   #6
Doom4eg
Пользователь
 
Аватар для Doom4eg
 
Регистрация: 09.01.2008
Сообщений: 30
По умолчанию

Нет, всегда надо искать последнюю цыфру, которая не равна нулю...
Doom4eg вне форума Ответить с цитированием
Старый 13.11.2008, 19:17   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

последняя цифра ( последняя цифра для ( (9!)^(n div 10) ) * ( (n mod 10)! ) )
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.11.2008, 19:29   #8
Doom4eg
Пользователь
 
Аватар для Doom4eg
 
Регистрация: 09.01.2008
Сообщений: 30
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
последняя цифра ( последняя цифра для ( (9!)^(n div 10) ) * ( (n mod 10)! ) )
Поподробнее обяснить можно?
Doom4eg вне форума Ответить с цитированием
Старый 13.11.2008, 20:04   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

попробую
на последнюю цифры влияет только последняя цифра поэтому

last(n!)=last((10k+x)!)=last((10k)! *x!)=last((10k)!)*last(x!)

last((10k)!) =last((10!) ^k) =last(10!) ^k

в
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.11.2008, 22:49   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

изменения к вычмслениям

last((10k)!)=last(((9!)^k)*last(k!) =last(9!)^k *last(k!)

применяя формулу рекурсивно получаем
last(n!)=last(x!)*last(9!)^k *last(k!)=last(xn!)*..*last(x1!)* last(9!)^(xn-1 +..+x1)

xn младшая цифра чмсла
xn-1следующая цифра
...
x1 старшая цифра

хотелось бы узнать откуда взялись эти задачи.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.11.2008 в 22:52.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Vitas1234 Паскаль, Turbo Pascal, PascalABC.NET 5 07.07.2008 12:10
Несколько очень легких задачек!проверьте себя!!на разные темы,от нах-я суммы до массивов!!прошу решить,кн ruslan55 Паскаль, Turbo Pascal, PascalABC.NET 3 17.06.2008 12:43
Задача/C++ Stan Помощь студентам 2 24.01.2008 20:33