けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 226 A - Round decimals (7Q, 灰色, 100 点)

色んな方法がありそう!

問題概要

0 以上 100 未満の小数第三位までで表すことのできる実数  X が、小数第三位まで入力されます。

 X を小数第一位で四捨五入した結果として得られる整数を出力してください。

考えたこと

C++ で解く場合、入力は cin を用いるよりも、scanf() を用いると楽だと思われます。scanf() を用いると、次のように「整数部分」と「小数部分」を分けて入力を受け取れます。

int a, b;
scanf("%d.%d", &a, &b);

その後は、整数 b の先頭が 5 以上の場合は a に 1 を足せば良いでしょう。具体的には、整数型b を文字列に変換したものは to_string(b) と表せるので、その先頭の文字を見ることで判定できます。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a, b;
    scanf("%d.%d", &a, &b);
    if (to_string(b)[0] >= '5') ++a;
    cout << a << endl;
}