割り算を実装したのは久しぶり。
問題
考察
整数部分は普通にA / B
で計算し、小数点以下は筆算と同じ方法で計算する。
その際に「B * x <= R
を満たす最大の整数x
」みたいなのを求めたくなるけど、これは数学を使うとO(1)で求められる。
具体的には、不等式をx <= R / B
と変形すると、「x
の最大値はR / B
の小数点以下を切り捨てたもの」とわかる。これは、C++だと普通にR / B
と書けば計算できる。
実装
void solve() { int a, b; cin >> a >> b; cout << (a / b) << "."; long long r = a % b; rep(_, 50) { r *= 10; int c = r / b; cout << c; r -= (long long) b * c; } cout << endl; }
感想
小数点第51位切り捨てなので、どんな言語であっても「一行書いて終わり」とはいかなそう。Rubyとかなら可能かも。