Hitung angka N pertama dari e


13

Tantangan

Tulis program untuk menghitung digit N pertama (<= 10 ^ 3) dari e .

Program Anda harus mengambil bilangan bulat N sebagai input.

Memasukkan:

100

Keluaran:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427

Memasukkan:

7

Keluaran:

2.718282

Memasukkan:

1000

Keluaran:

2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035

Solusi terpendek menang!

Jawaban:


8

Mathematica (12 byte)

N[E,Input[]]

Anda dapat mencobanya secara online: ada e-digitsperintah di yubnub.org misalnya, yubnub.org/parser/parse?command=e-digits+1000 yang menggunakan wolframalpha wolframalpha.com/input/…
jfs

1
-1 karena Anda tidak menerapkan perhitungan sendiri.
FUZxxl

2
@FUZxxl: Penulis tidak meminta implementasi, hanya yang terpendek yang lebih disukai.
Quixotic

7
@ Quixotic Pertanyaannya tidak mengatakan "menghitung" bukan hanya output. Apakah Anda akan berdebat hal yang sama jika pertanyaan itu mengatakan "menghitung", bukan "menghitung"?
nitro2k01

7

Python, 69

e = f = n = 1; N = input () + 2; exec "e + = 10 ** N / f; f * = n; n + = 1;" * N; print'2. '+ `e` [ 1: -4]

Menghitung iterasi N + 2 dari seri daya standar untuk e.


6

J, 20 ... ish.

Komputasi, tapi ... Sangat tidak efisien. Dengan n didefinisikan (20):

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

Sebagai fungsi monadik (32):

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

Sebagai fungsi tersembunyi (33, diperbaiki):

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

Konvergensi ini sangat cepat (untuk 100 digit Anda memerlukan "hanya" 70 istilah) sehingga Anda dapat menghapusnya +9.
Eelvex

Untuk 1000 digit ini: (0 j.<:1000)":+/%!i.x:450hanya butuh beberapa detik.
Eelvex

Apakah Anda mau menjelaskan kode Anda?
aaaaaaaaaaaa

@Eelvex: Tapi saya perlu ketentuan tambahan hingga N = 30 atau lebih. (Adakah petunjuk untuk mengurangi kekacauan komposisi lagu, atau apakah itu benar?)
Jesse Millikan

Ah, kamu benar, sangat disayangkan. ("Kekacauan" itu lebih pendek dari apa pun yang bisa saya buat - kecuali, tentu saja, Anda menggunakan nomor tetap untuk saya seperti (0 j.<:n)":+/%!i.999x:; lalu diam-diam:(+/%!i.999x)":~0 j.<: )
Eelvex

5

Python, 67

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

Hemat 3 karakter? from decimal import*dan hapus keduanyad.
Timtech

@Timtech import *tidak akan mengimpor _Onekarena garis bawah utama.
jfs

Oke, tidak tahu itu, maaf /
Timtech

3

05AB1E, 4 3 2 byte

Dicoret 4 masih teratur 4; (

Terima kasih kepada @Adnan untuk satu byte.

žt

Menggunakan pengodean CP-1252 .

Penjelasan:

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

Memperbarui:

Hapus I, seperti žtmengambil input pula jika tidak ada di stack.


1
Saya telah menandai ini sebagai non-bersaing karena 05AB1E dibuat sekitar 4 setengah tahun setelah tantangan ini diposting.
Mego

@Mego OK, saya akan ingat untuk melakukannya lain kali.
George Gibson

1
Selamat Datang di Programming Puzzles dan Code Golf! The žkarakter 1 byte dalam CP-1252 encoding, jadi ini memiliki skor total 2 byte bukan 3: p.
Adnan

@ Adnan Terima kasih! Bahasa yang bagus, btw.
George Gibson

@ GeorgeGibson Terima kasih! :)
Adnan

2

Ruby, 68

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

itu tidak berfungsi pada ruby1.8. Ini menghasilkan hasil yang tidak valid pada ruby1.9
jfs

Anda benar, tetapi itu harus bekerja di Ruby 1.9. Tampaknya ada sesuatu yang salah dengan presisi dalam fungsi E.
david4dev

Terlihat baik-baik saja di sini, itu hanya menambahkan beberapa angka yang tidak tepat. Mayby suka ini? require'bigdecimal / math '; menempatkan 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.'\

Sunting: Saya mungkin juga mengganti 0 dengan sisa 1 dari menginisialisasi b, perbedaan yang dihasilkan terlalu kecil untuk membuatnya menjadi output.

Saya meninggalkan versi lama karena itulah yang saya dokumentasikan di bawah ini.

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

~10\?Ambil input dan hitung 10 ^ input, biarkan hasilnya di tumpukan.
1:b;Simpan 1 di b.
0 461,Masukkan 0 pada stack, letakkan array [0 1 ... 459 460] pada stack.
{ }460*Jalankan fungsi 460 kali.
)b*:bAmbil elemen terakhir dari array, kalikan dengan b, simpan hasilnya di b dan biarkan hasilnya di stack.
@+\Ganti 0 (yang hanya nol pada iterasi pertama) ke atas tumpukan, tambahkan ke nilai b sisa, dan alihkan kembali hasilnya.
;Hapus sisa array (hanya [0] yang tersisa).
Angka yang diinisialisasi ke 0 sekarang memiliki nilai e * 460! dan b tahan 460!
*Lipat gandakan 10 ^ input dengan e * 460! (mereka pada saat ini hanya 2 elemen yang tersisa di tumpukan).
b/Bagilah hasilnya dengan b.
Tumpukan sekarang memiliki nilai input e * 10 ^ yang ketika dikonversi ke string akan menampung semua desimal, tetapi bukan titik.
`);(;'2.'\Sekelompok operasi string agar pas di titik.

e * 460! dihitung sebagai 1 + 460 + 460 * 459 + 460 * 459 * 458 dll.



0

J, 17

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

Contoh:

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

Penggunaan yang dibangun dalam kata kerja eksponensial - jadi, "menghitung" adalah dengan alasan goyah. Pada dasarnya:

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

*&0j1hanyalahj.
FrownyFrog

0

GTB , 14

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

Penjelasan

e- Masukkan esebagai nilai terhitung terakhir

S?- Konversi eke string_

`A - Masukan A

S;_,1,A+1Tampilkan Adigit pertamae



0

Mathematica, 7 byte

N[E,#]&

Jawaban saya adalah golf lebih lanjut dari ini jawaban .

Cobalah online!

Untuk beberapa alasan, output di TIO terlihat lucu tapi saya mengujinya di komputer saya dan kodenya berfungsi dengan baik.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.