前提・実現したいこと
下記の問題でDecimal型での演算をsqrtについて行いたいです
Atcoder/ ABC191 D
下記の通り、math.sqrt(xxx)ではなく、xxx.sqrt()と書き換えると計算が通ったのですが
①xxx.sqrt()の機能は、mathの機能に入っているものでしょうか?
②そもそもmath.sqrt(xxx)とxxx.sqrt()の違いは何なのでしょうか?
発生している問題・エラーメッセージ
計算途中でzzz + math.sqrt(xxx)を使っていましたが、下記のエラーメッセージが出ます
zzzはdecimal型なので、恐らくmath.sqrtはfloat型で値が返ってくるものと考えています
TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'
該当のソースコード
python
1import math 2from decimal import Decimal 3 4def main(): 5 x, y, r= map(Decimal, input().split()) 6 topx = math.floor(x+r) 7 botomx = math.ceil(x-r) 8 ans = 0 9 10 for i in range(botomx, topx+1): 11 root = math.sqrt(r**2 - (x-i)**2) 12 topy = math.floor(y + root) 13 botomy = math.ceil(y - root) 14 ans += topy - botomy + 1 15 print(ans) 16 17 18if __name__ == "__main__": 19 main() 20
試したこと
下記の通り、math.sqrt(xxx)ではなく、xxx.sqrt()に変更したら問題なく解けました
python
1import math 2from decimal import Decimal 3 4def main(): 5 x, y, r= map(Decimal, input().split()) 6 topx = math.floor(x+r) 7 botomx = math.ceil(x-r) 8 ans = 0 9 10 for i in range(botomx, topx+1): 11 root = (r**2 - (x-i)**2).sqrt() 12 topy = math.floor(y + root) 13 botomy = math.ceil(y - root) 14 ans += topy - botomy + 1 15 print(ans) 16 17 18if __name__ == "__main__": 19 main() 20
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/08 12:58