C/C++

Задание по C++

Ввести натуральное число n и вычислить его
Vlad Garbul
Vlad Garbul
10
#include
using namespace std;
int main() {
double result = 0.0;
int n;
cin >> n;
for (int i = 1; i <= n; i++)
result += 1*1.0 / i;
cout << result;
}
Андрій Сигарьов
Андрій Сигарьов
932
Лучший ответ
int n;
double s = 0.0;
cin >> n;
for (int i = n; i >= 1; --i) { s += 1.0 / i; }
cout << s;

Если начинать от n и двигаться к 1 получаем меньшую ошибку вычислений.
Дмитрий Шохов
Дмитрий Шохов
60 714
Делаем цикл только при n<20, где он, собственно, и нужен, а для бо́льших значений переменной n, где никакие циклы для достижения точности, близкой к машинной, естественно, не нужны, используем формулу для частичных сумм гармонического ряда:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
unsigned long long i, n;
double s, c = 0.5772156649015328606, a, S;
cout.precision(16);
for (;;)
{
cout << "n » ";
cin >> n;
s = 0.;
a = 1. / n / n;
if (n < 20)
{
for (i = 1; i <= n; i++) s += 1. / i;
cout << s << endl;
}
else cout << log(n) + c + 0.5 / n *
(1 - 1. / (6 * n) * (1 - a * (0.1 - a *
(1. / 21. - a * (0.05 - a / 55.))))) << endl;
}
}
Действительно, если n равно, например, квинтиллиону, то такую сумму через цикл будут вычислять одни лишь только сумасшедшие!. (•‿•)
$$$ Den $$$ .
$$$ Den $$$ .
29 440