Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите перевести число 9.33262154439E+157
Форумы портала PHP.SU » » Вопросы новичков » Помогите перевести число 9.33262154439E+157

Страниц (1): [1]
 

1. filchakov - 17 Июля, 2011 - 20:05:38 - перейти к сообщению
Здравствуйте, мне нужно посмотреть число 9.33262154439E+157 полностью. Мну нужно найти сумму всех цифр этого числа. А для этого нужно их все посмотреть. Подскажите как это сделать? Функции такой я не нашел.
2. White - 17 Июля, 2011 - 20:46:15 - перейти к сообщению
9.33262154439E+157 это 9.33262154439 умноженное на 10 в степени 157. это примерно 2 в 512 степени, т.е. одна переменная длинной в пол килобайта в полной записи

filchakov пишет:
Мну нужно найти сумму всех цифр этого числа

для этого вам нужно это число полностью, у вас есть только округленный вариант
3. filchakov - 17 Июля, 2011 - 20:51:00 - перейти к сообщению
White пишет:
для этого вам нужно это число полностью, у вас есть только округленный вариант
это я понимаю, я искал функцию которая распишет число полностью без округлений.
White пишет:
это примерно 2 в 512 степени

нужно точно, так как у меня есть ответ и он должен совпасть
4. Champion - 17 Июля, 2011 - 20:57:50 - перейти к сообщению
filchakov пишет:
нужно точно
Точно - так просто не получится. Либо нужно описать свой тип данных такой громадный, либо не нужно получать такое число. Лучше расскажи как задача звучит изначально. Наверное что-то вроде сделать то, то и то и у результатат посчитать сумму цифр? Тогда надо придумать, как получать промежуточные части числа и считать сумму цифр у них. Например, поработать с правыми 3 разрядами, поделить всё на 1000, продолжить свои действия и т д.
В общем, хотелось бы знать происхождение такой штуки.
(Добавление)
filchakov пишет:
я искал функцию которая распишет число полностью без округлений.
Если бы представляли, как данные в памяти представляются, то не искали бы, а сразу поняли, что нет такой функции, потому что нет такого типа данных.
5. filchakov - 17 Июля, 2011 - 21:03:07 - перейти к сообщению
Нужно найти сумму чисел факториала. Число для которого ищется факториал довольно таки большое.
6. EuGen - 17 Июля, 2011 - 21:05:51 - перейти к сообщению
Для этого Вам нужно реализовать алгоритм "длинной арифметики" - сложения и умножения.
Стандартная, между прочим, задача для олимпиад.
Вспомните, как складывать столбиком и как им умножать - и реализуйте это программно, а числа соответственно в виде строк хранить будете.
Ибо если n=100000000, то n! Вы не уместите ни в каком типе данных.
7. Champion - 17 Июля, 2011 - 21:08:10 - перейти к сообщению
Возможно, действительно с делением надо играться - не давать числу переполнить integer, получить в конце последние 6 цифр числа. С double можно побольше.
Потом снова искать этот же факториал, но мутить что-то такое, чтобы в итоге получилось число из вторых 6 цифр и т д....
Проще релизовать что-то типа своего типа данных - структура из нескольких интегеров. И реализовать для нее переполнение правильно при умножении.
(Добавление)
Или да, или строку
(Добавление)
EuGen пишет:
если n=100000000, то n! Вы не уместите ни в каком типе данных.
Я думаю, что это и строка такая не хилая получится, если это число в строку записать)
8. EuGen - 17 Июля, 2011 - 21:13:25 - перейти к сообщению
Можно. Но если последовательно умножать, то это цикл в обозримое число итераций.
Тем более что в итоге нужна сумма его цифр.
9. White - 17 Июля, 2011 - 22:15:07 - перейти к сообщению
можно представить исходные данные в виде массива Byte(хватило бы и четырех битов), где каждая переменная отвечает определеному знаку числа, тогда можно и в столбик складывать, либо в двоичном виде и делать побитовое сложение.

P.S. а все таки интересно условие задачи узнать.
10. black_ru - 18 Июля, 2011 - 00:06:54 - перейти к сообщению
Факториал числа 100 на калькуляторе дает именно такое число.

Если это так, то число.
Но я могу ошибаться

93326215443944152681699238856266 7004907159682643816214685929
638952175999932299156089414639761565182862536979208272237582
51185210916864000000000000000000 000000

Проверьте
http://ru[dot]numberempire[dot]com/facto[dot][dot][dot]alcalculator.php
11. filchakov - 18 Июля, 2011 - 03:29:14 - перейти к сообщению
black_ru пишет:
Факториал числа 100 на калькуляторе дает именно такое число.
Да все верно, я должен был получить это число.
Я его нашел через математические функции BCMath, они такое могут. Все спасибо ;)
12. black_ru - 18 Июля, 2011 - 03:51:06 - перейти к сообщению
Радость А я методом приблизительного тыка, с 5 раза ткнул на n! на калькуляторе и оно вылетело.
больше времени ушло, чтобы найти калькулятор факториалов, а ссылка на него оказывается была, можно сказать, под самым носом, в Википедии.

 

Powered by ExBB FM 1.0 RC1