|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.03.2012, 23:06 | #1 |
Регистрация: 22.10.2009
Сообщений: 8
|
100! Одним числом
Есть такой код, который вычисляет факториал 100, очень хотелось бы разобраться как он работает, вот собственно сам код:
Код:
|
18.03.2012, 01:19 | #2 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Делается обычная длинная арифметика. A - массив десятичных чисел числа.
Число = A[0] + 10 * A[1] + 100 * A[2] + ... Изначально число в A - 1. Потом оно последовательно умножается на все числа до 100. Для этого мы сначала каждый элемент массива умножаем на k, после чего обрабатываем переполнение (случаи, когда A[i] >= 10, мы все-таки цифры в них храним). Собственно, вот этот код Код:
Форматируйте код, будьте людьми.
|
18.03.2012, 17:41 | #3 |
Регистрация: 22.10.2009
Сообщений: 8
|
а можно по подробнее, как будто если бы вы чайнику объясняли?
как работает особенно эта конструкция: Код:
|
19.03.2012, 10:41 | #4 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Для начала, чуть-чуть подправлю, чтобы было понятнее
Код:
Напомню, в массиве A мы храним десятичные цифры нашего числа. X = A[0] + 10 * A[1] + 100 * A[2] + ... + 10^199 * A[199]; Из этого представления видно, что чтобы умножить число на k (где k - "короткое" число, помещающееся в базовые типы данных), мы можем каждую цифру умножить на k: Код:
Приведенное выше разложение все еще будет работать, но вот нам дальше работать с этим числом трудновато (все операции считают, что в массиве только цифры). Поэтому мы боремся с переполнением: Код:
Форматируйте код, будьте людьми.
|
21.03.2012, 02:36 | #5 |
Регистрация: 22.10.2009
Сообщений: 8
|
вроде бы все понятно. Гранусу большое спасибо за ответ.
Очень помог. |
21.03.2012, 06:44 | #6 |
Пользователь
Регистрация: 28.02.2012
Сообщений: 46
|
У меня подобный пример но переписан под вектор
Но работает только на коротких числах (до 26!) а потом только конец цифры Код:
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
Последний раз редактировалось Karmadon; 21.03.2012 в 11:19. |
21.03.2012, 12:02 | #7 |
Пользователь
Регистрация: 28.02.2012
Сообщений: 46
|
работающий вариант
Вот работающий варинат (может пригодится)
Код:
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Воплотить идею: for i:=0 to 100 Edit[i].text:=random(100) | tigr1991 | Общие вопросы Delphi | 6 | 29.09.2010 18:53 |
Найти произведение всех чётных чисел от -100 до 100. | Makcumqa | Помощь студентам | 8 | 18.03.2010 22:31 |
заполнить файл целыми числами из отрезка [—100; 100] с помощью датчика случайных чисел. | ALEX-7-7-7 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 05.04.2009 14:51 |
BETWEEN и LIKE одним запросом | Pinya | SQL, базы данных | 9 | 19.08.2008 11:30 |