a204: Exact sinx

a204: Exact sinx

題目連結:a204: Exact sinx

題意:

計算 sin(x) 且精確到小數點以下50位,50 位後,無條件捨去

解法:

利用公式 sin x = x - (x^3 / 3!) + (x^5 / 5!) - (x^7 / 7!) + ...  for all x.
用 python 的 Decimal 模組可以輕鬆且快速地計算大數
prec 要開大一點,rounding 設成 ROUND_DOWN(無條件捨去)
公式大概求到第230項左右就夠了
我找了一下,Decimal 模組好像沒有內建三角函數的函式QQ
不過其實還算是蠻好寫的~

time : 50ms
memory used : 4.1MB
code :
  1. import sys
  2. from decimal import *
  3. setcontext(Context(prec=5000,rounding=ROUND_DOWN))
  4. factorial=[1]
  5. fac=Decimal('1')
  6. for i in range(2,225):
  7.  fac*=Decimal(i)
  8.  factorial.append(fac)
  9. while True:
  10.  s=sys.stdin.readline()
  11.  if not s:
  12.   break
  13.  s=Decimal(s)
  14.  sin=s
  15.  for i in range(5,225,4):
  16.   sin+=(Decimal((s**Decimal(i)))/Decimal(factorial[i-1]))
  17.  for i in range(3,225,4):
  18.   sin-=(Decimal((s**Decimal(i)))/Decimal(factorial[i-1]))
  19.  print("{:.50f}".format(sin))

本人的分享到此結束
若有更好的想法或建議,請在留言區留言喔

Comments

Popular Posts