Дано целое число n(вводится с клавиатуры). Вычислить сумму из n слагаемых
Задание: Дано целое число n(вводится с клавиатуры). Вычислить сумму из n слагаемых:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>
int main() {
setlocale(LC_ALL, "Rus");
int n, y = 1, m = 0;
printf("Введите n: "); scanf("%d", &n);
while (n !=0) { // Факториал
y = y * n ;
n = n - 1;
}
while (n!=0) { // Знаменатель
m = m + ((n + n + 1) * (n + n + 1));
n = n - 1;
}
printf("%d", y);
printf("\n%d", m);
}
Пока что делаю просто набросок, столкнулся с проблемой, что в m у меня выводит m=0 и оно не меняется. В чем может быть ошибка? Делаю ведь сложение m + какое-то число.
Ответы (3 шт):
Автор решения: MBo
→ Ссылка
Просто аккуратно записать все шаги (ideone).
При вычислении sum можно использовать формулу, ну да ладно.
int n, last = 0, f = 1;
printf("Введите n: "); scanf("%d", &n);
double res = 0;
for(int i=1; i <= n; i++) {
f *= i;
int sum = 0;
for(int k=last+1; k <= last+i; k++)
sum += k;
last += i;
res += 1.0 * f / (sum * sum);
}
printf("%f", res);
Автор решения: Danis
→ Ссылка
Вы в цикле while уменьшаете n до нуля из-за этого второй цикл while просто не выполняется.
Решить это можно создав дополнительную переменную, а в циклах использовать другую, хотя правельней будет вынести вычисление факториала в отдельную функцию
Автор решения: Harry
→ Ссылка
unsigned int n;
scanf("%u",&n);
double term = 1.0, sum = 1.0;
for(unsigned int k = 2; k <= n; ++k)
{
double a = k - 3. + (3.*k+1.)/(k*k+1.);
sum += term *= a*a/k;
}
printf("%.10lf\n",sum);
Полный код здесь.