func_code_string: #include <bits/stdc++.h>   using namespace std;   bool comp(int a, int b) { return a > b; }   int gcd(int a, int b) {     if (b == 0) return a;     return gcd(b, a % b);   }   bool isPrime(int n) {     if (n <= 1) return false;     if (n <= 3) return true;     if (n % 2 == 0 || n % 3 == 0) return false;     for (int i = 5; i * i <= n; i = i + 6) {       if (n % i == 0 || n % (i + 2) == 0) {         return false;       }     }     return true;   }   void primeFactors(int n) {     while (n % 2 == 0) {       cout << 2 <<    ;       n = n / 2;     }     for (int i = 3; i <= sqrt(n); i = i + 2) {       while (n % i == 0) {         cout << i <<    ;         n = n / i;       }     }     if (n > 2) {       cout << n <<    ;     }   }   int dayofweek(int d, int m, int y) {     static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};     y -= m < 3;     return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7;   }   void BellmanFord(int graph[][3], int V, int E, int src) {     int dis[V];     for (int i = 0; i < V; i++) dis[i] = INT_MAX;     dis[src] = 0;     for (int i = 0; i < V - 1; i++) {       for (int j = 0; j < E; j++) {         if (dis[graph[j][0]] + graph[j][2] < dis[graph[j][1]])           dis[graph[j][1]] = dis[graph[j][0]] + graph[j][2];       }     }     bool flag = true;     for (int i = 0; i < E; i++) {       int x = graph[i][0], y = graph[i][1], weight = graph[i][2];       if (dis[x] != INT_MAX && dis[x] + weight < dis[y]) {         flag = false;         break;       }     }   }   void topoSort(int n, int m, vector<vector<bool>> &e, vector<bool> &visited,                 int x) {     visited[x] = true;     for (int i = n - 1; i >= 0; i--) {       if (e[x][i] and !visited[i]) {         topoSort(n, m, e, visited, i);       }     }     return;   }   void convertGraphToTree(int x, vector<vector<int>> &v, vector<bool> &visited,                           vector<vector<int>> &newedges) {     visited[x] = true;     for (int i = 0; i < v[x].size(); i++) {       if (!visited[v[x][i]]) {         newedges[x].push_back(v[x][i]);         convertGraphToTree(v[x][i], v, visited, newedges);       }     }     return;   }   int subtreeCount(int x, vector<vector<int>> &v, vector<bool> &visited,                    vector<int> &count) {     visited[x] = true;     int ans = 1;     for (int i = 0; i < v[x].size(); i++) {       if (!visited[v[x][i]]) {         ans += subtreeCount(v[x][i], v, visited, count);       }     }     count[x] = ans;     return ans;   }   void helper(int n) {     double ans = 0.0;     for (int i = n; i >= 1; i--) {       double temp = 1.0 / double(i);       ans += temp;     }     cout << ans << endl;     return;   }   int main() {     int n;     cin >> n;     helper(n);     return 0;   }   