はまやんはまやんはまやん

hamayanhamayan's blog

Round Down [AtCoder Beginner Contest 196 B]

https://atcoder.jp/contests/abc196/tasks/abc196_b

解説

https://atcoder.jp/contests/abc196/submissions/21118594 プログラムは小数を扱うのがあまり得意ではなく、プログラム内部で小数を表現するときは誤差に注意する必要がある。
その辺りの知識を問うような問題。
あまりよく知らない人は「浮動小数点」とか「丸め誤差」とかを参照するといいと思う。
…というわけで、プログラム内部の表現として小数で表現しなくてもいい場合はそういう方針を取ると正確な答えが得られる。

文字列のまま処理する

現実世界で考えると、小数点以下の切り捨てをするとなると、小数点以下をただ消すだけでよくなる。
Xを文字列として考えて、同様の処理を行おう。
.以下を切り捨てるような実装をする。
自分の実装ではsubstrとfindを使って実装した。
.が無いときにバグりそうだけど、良い感じにしてくれる(なってた)ので、そのまま出す。

string X;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> X;
    string ans = X.substr(0, X.find('.'));
    cout << ans << endl;
}