C/C++

Задание по программированию c++

Программа для вычисления значения выражения:

1!+2!+3!+⋯+n!

Исходные данные: целое число n.

Данные, выводимые на экран: значение выражения, либо сообщение «Исходные данные не верны!» (при n≤0).
#include "iostream"
#include "iomanip"
#include "cmath"
using namespace std;
int main(){
int n; long double s=0; cout<<"n: "; cin>>n;
if(n<0)cout<<"Error\n";
else {for(int i=1;i<=n;i++)s+=tgamma(i+1);
cout<<setprecision(0)<<fixed<<s<<'\n';}}

Сообщения замени на свои.

Или более простой вариант, со значительно меньшим диапазоном допустимых значений n:

#include "iostream"
using namespace std;
int main(){
int n; long k=1, s=0; cout<<"n: "; cin>>n;
if(n<0)cout<<"Error\n";
else {for(int i=1;i<=n;i++)s+=k*=i; cout<<s<<'\n';}}
Сергей Поздняков
Сергей Поздняков
76 528
Лучший ответ
Если надо получить точное значение суммы, причём потолок n не ограничен числом 20, тогда надо использовать какие-нибудь библиотеки типа GMP для работы с целыми числами неограниченной длины. Посмотрите на скрине как с этой библиотекой всё быстро и точно рассчитывается и выводится на экран! Если нужна программа -могу скинуть: исходный код очень короткий. А сразу не пишу её потому что не знаю какими средствами Вы располагаете -вдруг у Вас нет ни GMP, ни схожих с ней библиотек, да к тому же ещё и числа n со значениями больше двадцати не требуются, а если и требуются, тогда абсолютная точность не требуется.
А без GMP будет так (до n=20 включительно -точно, можно сделать и для n>20, но будет неточно):
#include <iostream>
using namespace std; int main()
{ int i, n; unsigned long long f, s; for (;;)
{ s = 0; f = 1; cout << "n: "; cin >> n; if (n < 1)
cout << "Исходные данные не верны!\n";
else { for (i = 1; i <= n; i++) { f *= i; s += f; }
cout << s << endl; } } }
Юрка Поддубный
Юрка Поддубный
66 572