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 :
- import sys
- from decimal import *
- setcontext(Context(prec=5000,rounding=ROUND_DOWN))
- factorial=[1]
- fac=Decimal('1')
- for i in range(2,225):
- fac*=Decimal(i)
- factorial.append(fac)
- while True:
- s=sys.stdin.readline()
- if not s:
- break
- s=Decimal(s)
- sin=s
- for i in range(5,225,4):
- sin+=(Decimal((s**Decimal(i)))/Decimal(factorial[i-1]))
- for i in range(3,225,4):
- sin-=(Decimal((s**Decimal(i)))/Decimal(factorial[i-1]))
- print("{:.50f}".format(sin))
本人的分享到此結束
若有更好的想法或建議,請在留言區留言喔
Comments
Post a Comment