Блог пользователя epsilon_573

Автор epsilon_573, история, 4 года назад, По-английски

I have tried 20-30 times , using floor() and type casting but I can't seem to get AC. What is the problem here? Thanks for the help.

Problem : https://atcoder.jp/contests/abc169/tasks/abc169_c

// Author : Epsilon573
// If it works, don't touch it.

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

typedef long long ll;
typedef long double ld;

int main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    ll a; ld b;
    cin >> a >> b;

    ll c = b*100;

    cout << a*c/100LL;

    return 0;
} 
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Floating point types have a precision, so the result of calculations is often not exact. If you want to cast to an integer type this can lead to wrong result.

In this case you can do something like ll c=(b+0.001)*100; to force kind of round-up. Or read the number as a string, and parse by hand ignoring the dot.