Вычислить первые N цифр е


13

Вызов

Напишите программу для вычисления первых N (<= 10 ^ 3) цифр e .

Ваша программа должна принимать целое число N в качестве входных данных.

Входные данные:

100

Выход:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427

Входные данные:

7

Выход:

2.718282

Входные данные:

1000

Выход:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

Самое короткое решение побеждает!

Ответы:


8

Mathematica (12 байт)

N[E,Input[]]

Вы можете попробовать это онлайн: e-digitsна yubnub.org есть команда, например, yubnub.org/parser/parse?command=e-digits+1000, которая использует wolframalpha wolframalpha.com/input/…
jfs

1
-1 потому что вы сами не реализуете вычисления.
FUZxxl

2
@FUZxxl: автор не просил о реализации, предпочтительнее только самые короткие.
Quixotic

7
@Quixotic Вопрос говорит «вычислить», а не только вывод. Вы бы спорили о том же, если бы в вопросе говорилось «вычислить» вместо «вычислить»?
nitro2k01

7

Python, 69

е = е = п = 1, N = вход () + 2 Exec "е + = 10 ** N / F, F * = п; п + = 1;" * Н;. print'2 '+ `é` [ 1: -4]

Вычисляет N + 2 итерации стандартных степенных рядов для e.


6

J, 20 ... иш.

Вычислительный, но ... Очень неэффективный. С определением n (20):

(0 j.<:n)":+/%!i.x:n+9

В качестве монадической функции (32):

ge =. 3 : '(0 j.<:y)":+/%!i.x:y+9'

Как молчаливая функция (33, фиксированная):

(0 j.<:)":(+/)&:(%&!&i.&x:&(9&+))

Это сходится очень быстро (для 100 цифр вам нужно «всего лишь» 70 терминов), так что вы можете отбросить это +9.
Eelvex

Для 1000 цифр это: (0 j.<:1000)":+/%!i.x:450занимает всего несколько секунд.
Eelvex

Не могли бы вы объяснить свой код?
аааааааааааа

@Eelvex: Но мне нужны дополнительные термины до N = 30 или около того. (Любые намеки на уменьшение этого беспорядка сочинений, или это правильно?)
Джесси Милликен

Ах, ты прав, это прискорбно. (Это «беспорядок» короче , чем все остальное я мог придумать - если, конечно , от, вы используете фиксированное число для г , как:. (0 j.<:n)":+/%!i.999x, А затем молчаливо: (+/%!i.999x)":~0 j.<:)
Eelvex

5

Python, 67

import decimal as d
d.getcontext().prec=input()
print d._One.exp()

Сохранить 3 символа? from decimal import*и удалите обаd.
Timtech

@Timtech import *не будет импортировать _Oneиз-за ведущих символов подчеркивания.
JFS

Хорошо, не знал этого, извините /
Timtech

3

05AB1E, 4 3 2 байта

Вычеркнуто 4 все еще регулярно 4; (

Спасибо @Adnan за байт.

žt

Использует CP-1252 кодировку .

Объяснение:

žt - Push input. Pop a, push e to a places (up to 10000).

Обновить:

Удалить I, так как в žtлюбом случае принимает входные данные, если в стеке нет ни одного.


1
Я отметил это как неконкурентный, потому что 05AB1E был создан примерно через 4 с половиной года после того, как этот вызов был опубликован.
Мего

@ Хорошо, я запомню это сделать в следующий раз.
Джордж Гибсон

1
Добро пожаловать в Программирование головоломок и Code Golf! Символ žявляется 1 байтом в кодировке CP-1252 , поэтому он имеет общую оценку 2 байта вместо 3: p.
Аднан

@ Adnan Спасибо! Хороший язык, кстати.
Джордж Гибсон

@ GeorgeGibson Спасибо! :)
Аднан

2

Руби, 68

require 'bigdecimal/math';include BigMath;puts E(gets.to_i).to_s 'F'

это не работает на ruby1.8. Она производит недопустимые результаты на ruby1.9
JFS

Вы правы, но это должно работать в Ruby 1.9. Кажется, что-то не так с точностью в функции E.
david4dev

Здесь все выглядит хорошо, просто добавляются некоторые неточные цифры. Может, как это? require'bigdecimal / math '; помещает BigMath :: E (a = gets.to_i) .to_s (? F) [0, a + 1]
steenslag

1

GolfScript 43 41

~10\?1:b 461,{)b*:b@+\}460*;*b/`);(;'2.'\

Изменить: я мог бы также заменить 0 с остатком 1 от инициализации b, результирующая разница слишком мала, чтобы сделать его на выходе.

Я оставил старую версию, так как это то, что я задокументировал ниже.

~10\?1:b;0 461,{)b*:b@+\}460*;*b/`);(;'2.'\

~10\?Возьмите ввод и вычислите 10 ^ ввод, оставьте результат в стеке.
1:b;Магазин 1 в б.
0 461,Поместите 0 в стек, поместите массив [0 1 ... 459 460] в стек.
{ }460*Выполните функцию 460 раз.
)b*:bВозьмите последний элемент массива, умножьте его на b, сохраните результат в b и оставьте результат в стеке.
@+\Переключите 0 (который является нулем на первой итерации) на вершину стека, добавьте его к оставшемуся значению b и снова переключите результат обратно.
;Удалите оставшуюся часть массива (осталось только [0]).
Число, которое было инициализировано 0, теперь содержит значение e * 460! и б держать 460!
*Умножьте 10 ^ ввод на e * 460! (на данный момент они являются единственными 2 элементами, оставшимися в стеке).
b/Разделите результат на б.
Теперь в стеке содержится значение e * 10 ^ input, которое при преобразовании в строку будет содержать все десятичные дроби, но не точку.
`);(;'2.'\Куча строковых операций для размещения в точке.

е * 460! рассчитывается как 1 + 460 + 460 * 459 + 460 * 459 * 458 и т. д.



0

J, 17

(":&(x:^1)@*&0j1)

Пример:

(":&(x:^1)@*&0j1) 50
2.71828182845891281655718620537435347047040502245993

Использует встроенный экспоненциальный глагол - так что «вычислить» на шатких основаниях. В принципе:

^1 - computes e**1
x: - does extended precision
0jy ": - formats the number to y digit

*&0j1это простоj.
FrownyFrog

0

БРГ , 14

eS?`AS;_,1,A+1

объяснение

e- поставить eв качестве последнего рассчитанного значения

S?- конвертировать eв строку_

`A - Вход А

S;_,1,A+1Показать первые Aцифрыe


0

Mathcad, [tbd] байт

введите описание изображения здесь

Использует алгоритм spigot - http://comjnl.oxfordjournals.org/content/11/2/229.full.pdf+html .


Число байтов, не указанное как эквивалентность числа байтов Mathcad, еще предстоит определить. Однако, используя символьную эквивалентность, он составляет примерно 121 байт ... и не собирается выигрывать призы за краткость, независимо от того, как определяется эквивалентность.


0

Mathematica, 7 байтов

N[E,#]&

Мой ответ - дальнейшая игра в гольф этого ответа.

Попробуйте онлайн!

По некоторым причинам вывод в TIO выглядит забавно, но я проверил его на своей машине, и код работает просто отлично.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.