[AtCoder] ABC 169 C – Multiplication 3

2020年12月14日

問題

方針

オーバーフローが問題となるので、整数部と小数部に分けて計算します。\( B \) を \(100\) 倍する方法だと誤差がでるので、文字列として扱います。

コード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    ll A;
    string B;
    cin >> A >> B;
    ll iB = (ll)(B[0] - '0');
    ll dB = 0;
    if (B.length() == 4) {
        dB = 10 * (B[2] - '0') + (B[3] - '0');
    } else if (B.length() == 3) {
        dB = (B[2] - '0');
    }
    ll ans = (A *dB) / 100ll + A * iB;
    cout << ans << "\n";
    return 0;
}