ぺんぎんメモ

プログラミングのメモです。たまに私生活のことや鬱っぽいことを書きます。

yukicoder No.858 - わり算

割り算を実装したのは久しぶり。

問題

yukicoder.me

考察

整数部分は普通に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とかなら可能かも。