#include <iostream>
#include <string>

using namespace std;
using ll = long long;

int main(void){
  string X;

  cin >> X;

  if (X == "0") {
    cout << 0 << endl;
    return 0;
  }

  string ans;
  for (auto x : X) {
    if (x != '.') {
      ans += x;
    } else {
      break;
    }
  }

  cout << ans << endl;

  return 0;
}
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>

#define ordered_set tree<int, null_type, less<int >,rb_tree_tag, tree_order_statistics_node_update>
using namespace __gnu_pbds;
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define ll long long
#define ld long double
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define vii vector<int>
#define pii pair<ll,ll>
#define vll vector<ll>
#define clr(v, d) memset(v,d,sizeof(v))
using namespace std;
const int N = 2e6 + 500, mod = 1e9 + 7;
int a[N];
vector<int> dx[N];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int n;
    cin>>n;
    ld ans=0;
    for (int i = 1; i <n ; ++i) {
        ans+=(ld)n/i;
    }
    cout<<fixed<<setprecision(6)<<ans<<"\n";

    return 0;
}