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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите перевести число 9.33262154439E+157
Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
Здравствуйте, мне нужно посмотреть число 9.33262154439E+157 полностью. Мну нужно найти сумму всех цифр этого числа. А для этого нужно их все посмотреть. Подскажите как это сделать? Функции такой я не нашел.
White
Отправлено: 17 Июля, 2011 - 20:46:15
Частый посетитель
Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011 Откуда: Днепропетровск
Помог: 28 раз(а)
9.33262154439E+157 это 9.33262154439 умноженное на 10 в степени 157. это примерно 2 в 512 степени, т.е. одна переменная длинной в пол килобайта в полной записи
filchakov пишет:
Мну нужно найти сумму всех цифр этого числа
для этого вам нужно это число полностью, у вас есть только округленный вариант
Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
White пишет:
для этого вам нужно это число полностью, у вас есть только округленный вариант
это я понимаю, я искал функцию которая распишет число полностью без округлений.
White пишет:
это примерно 2 в 512 степени
нужно точно, так как у меня есть ответ и он должен совпасть
Champion
Отправлено: 17 Июля, 2011 - 20:57:50
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
filchakov пишет:
нужно точно
Точно - так просто не получится. Либо нужно описать свой тип данных такой громадный, либо не нужно получать такое число. Лучше расскажи как задача звучит изначально. Наверное что-то вроде сделать то, то и то и у результатат посчитать сумму цифр? Тогда надо придумать, как получать промежуточные части числа и считать сумму цифр у них. Например, поработать с правыми 3 разрядами, поделить всё на 1000, продолжить свои действия и т д.
В общем, хотелось бы знать происхождение такой штуки. (Добавление)
filchakov пишет:
я искал функцию которая распишет число полностью без округлений.
Если бы представляли, как данные в памяти представляются, то не искали бы, а сразу поняли, что нет такой функции, потому что нет такого типа данных.
filchakov
Отправлено: 17 Июля, 2011 - 21:03:07
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
Нужно найти сумму чисел факториала. Число для которого ищется факториал довольно таки большое.
EuGen
Отправлено: 17 Июля, 2011 - 21:05:51
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Для этого Вам нужно реализовать алгоритм "длинной арифметики" - сложения и умножения.
Стандартная, между прочим, задача для олимпиад.
Вспомните, как складывать столбиком и как им умножать - и реализуйте это программно, а числа соответственно в виде строк хранить будете.
Ибо если n=100000000, то n! Вы не уместите ни в каком типе данных.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Champion
Отправлено: 17 Июля, 2011 - 21:08:10
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Возможно, действительно с делением надо играться - не давать числу переполнить integer, получить в конце последние 6 цифр числа. С double можно побольше.
Потом снова искать этот же факториал, но мутить что-то такое, чтобы в итоге получилось число из вторых 6 цифр и т д....
Проще релизовать что-то типа своего типа данных - структура из нескольких интегеров. И реализовать для нее переполнение правильно при умножении. (Добавление)
Или да, или строку (Добавление)
EuGen пишет:
если n=100000000, то n! Вы не уместите ни в каком типе данных.
Я думаю, что это и строка такая не хилая получится, если это число в строку записать)
EuGen
Отправлено: 17 Июля, 2011 - 21:13:25
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Можно. Но если последовательно умножать, то это цикл в обозримое число итераций.
Тем более что в итоге нужна сумма его цифр.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
White
Отправлено: 17 Июля, 2011 - 22:15:07
Частый посетитель
Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011 Откуда: Днепропетровск
Помог: 28 раз(а)
можно представить исходные данные в виде массива Byte(хватило бы и четырех битов), где каждая переменная отвечает определеному знаку числа, тогда можно и в столбик складывать, либо в двоичном виде и делать побитовое сложение.
P.S. а все таки интересно условие задачи узнать.
----- if(time()>1356048000) die();
black_ru
Отправлено: 18 Июля, 2011 - 00:06:54
Новичок
Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Факториал числа 100 на калькуляторе дает именно такое число.
Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
black_ru пишет:
Факториал числа 100 на калькуляторе дает именно такое число.
Да все верно, я должен был получить это число.
Я его нашел через математические функции BCMath, они такое могут. Все спасибо ;)
black_ru
Отправлено: 18 Июля, 2011 - 03:51:06
Новичок
Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
А я методом приблизительного тыка, с 5 раза ткнул на n! на калькуляторе и оно вылетело.
больше времени ушло, чтобы найти калькулятор факториалов, а ссылка на него оказывается была, можно сказать, под самым носом, в Википедии.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.