競プロ解法メモ

自分用のメモが主目的なので厳密性は求めないでください

yukicoder No.1842 Decimal Point

問題:No.1842 Decimal Point - yukicoder

 やっていることは公式解説と同じだと思う。自分みたいに「具体例がないと分からん」っていう人用。

A=314,B=13,C=3

とする。つまり

314\div 13の小数第3位

を求める。筆算で求めるとして、小数第3位の直前までやると以下のようになる。

f:id:mkawa2:20220219104245j:plain

求めたいのは緑のマス。ここを決めるためには何が分かればいいかというと

f:id:mkawa2:20220219104921j:plain

最後の数(=5)が分かればよい。よって、まずこの数を求めることを考える。では、この数が何かというと、以下のように小数点以下に0を付けて考えてやれば

f:id:mkawa2:20220219105450j:plain

31400\div 13の余り

だと分かる。つまり問題のA,B,Cを使っていうと

Aに0をC-1個付けて、Bで割った余り

ということ。この余りをRとして式で表すと

R=A\cdot 10^{c-1}\% B

となる。これさえ求まれば、あとは以下のように

f:id:mkawa2:20220219110130j:plain

0を付けて(=10倍して)、緑に入る数字を求めればいい。この場合なら

50\div 13=3\ldots 11

なので以下のように3が入る。

f:id:mkawa2:20220219110741j:plain

つまり、先程のRを使えば、答えは

\lfloor\frac{10R}{B}\rfloor   ※\lfloor\  \rfloorは切り捨てを表す

となる。

 

提出コード:

#740773 (Python3) No.1842 Decimal Point - yukicoder