Форум программистов, компьютерный форум CyberForum.ru

Дано натуральное число n. Вычислить значение формулы - C++

Восстановить пароль Регистрация
 
CriRo7
-2 / 0 / 0
Регистрация: 06.10.2014
Сообщений: 9
09.02.2016, 14:17     Дано натуральное число n. Вычислить значение формулы #1
Дано натуральное число n. Вычислить значение формулы.
Помогите пожалуйста, кому не трудно. Формулы на фото прикреплены ниже
а)http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{k = 1}^{n} k(k+1)...{k}^{2}
б)http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{k = 1}^{n} {k}^{k}
 Комментарий модератора 
Для формул на форуме есть редактор.
Вложения, ожидающие проверки
Тип файла: jpg задание.jpg
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2016, 14:17     Дано натуральное число n. Вычислить значение формулы
Посмотрите здесь:

Дано натуральное число N. Вычислить C++
C++ Дано натуральное число п. Вычислить:
C++ Дано натуральное число n, вычислить
Дано натуральное число n.Вычислить C++
Дано натуральное число n. Вычислить C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
8-BITOV
513 / 455 / 83
Регистрация: 05.05.2014
Сообщений: 1,077
09.02.2016, 15:55     Дано натуральное число n. Вычислить значение формулы #2
1)
C++
1
2
3
4
5
6
7
s = 0;
for(k=1; k<=n; k++) {
 p = 1;
 for(i=k; i<=k*k; i++)
   p *= i;
 s += p;
}
2) - аналогично
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
09.02.2016, 16:31     Дано натуральное число n. Вычислить значение формулы #3
2-е задание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int s = 0;
    int n;
    cout << "n = "; cin >> n;
    for (int k = 1; k <= n; k++)
    s += pow(k,k);
    cout << s;
}
Добавлено через 21 минуту
1-е задание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
 
using namespace std;
 
double factorial(int n)
{
    return n<2 ? 1 : factorial(n-1)*n;
}
 
int main()
{
    double s = 0;
    int n,k;
    cout << "n = "; cin >> n;
    for (k = 1; k <= n; k++)
    s += factorial(k*k)/factorial(k-1);
    cout << s;
}
Добавлено через 4 минуты
Формально, набросок решения 8-BITOV правильный, но уже при n = 4 выдаст неверный ответ (отрицательный) из-за переполнения типа. В моём решении это произойдёт при n = 14.
aiwprton805
 Аватар для aiwprton805
64 / 64 / 23
Регистрация: 30.03.2013
Сообщений: 178
Завершенные тесты: 1
09.02.2016, 16:34     Дано натуральное число n. Вычислить значение формулы #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
 
using namespace std;
 
unsigned long long sumA(unsigned);
unsigned long long sumB(unsigned);
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "rus");
 
    unsigned n;
    cout << "Введите n (от 1 до 4)" << endl;
    cin >> n;
    cout << "sumA = " << sumA(n) << endl;
 
    cout << "Введите n (от 1 до 15)" << endl;
    cin >> n;
    cout << "sumB = " << sumB(n) << endl;
 
    return 0;
}
 
unsigned long long sumA(unsigned n)
{
    unsigned long long a, sum = 0;
    for (unsigned i = 1; i <= n; ++i) {
        a = 1;
        for (unsigned j = i; j <= i*i; ++j) {
            a *= j;
        }
        sum += a;
    }
    return sum;
}
 
unsigned long long sumB(unsigned n)
{
    unsigned long long a, sum = 0;
    for (unsigned i = 1; i <= n; ++i) {
        a = 1;
        for (unsigned j = 1; j <= i; ++j) {
            a *= i;
        }
        sum += a;
    }
    return sum;
}
8-BITOV
513 / 455 / 83
Регистрация: 05.05.2014
Сообщений: 1,077
09.02.2016, 17:41     Дано натуральное число n. Вычислить значение формулы #5
Цитата Сообщение от SpBerkut Посмотреть сообщение
Формально, набросок решения 8-BITOV правильный, но уже при n = 4 выдаст неверный ответ (отрицательный) из-за переполнения типа.
Да, совершенно правильно. Чтобы получить хоть мало-мальски приемлемые результаты, надо использовать double.
Однако, позвольте и мне слегка покритиковать ваше решение.
1. k*(k+1)*...*k2 вы считаете как (k2)! / (k-1)! Но это чудовищно неэффективно (хотя и правильно формально). Плюс к тому, использование естественных формул может увеличить диапазон "до переполнения". Не намного, скажем, до 16, но все-таки.
2. Рекурсивное вычисление факториалов. Их так только в школе считают. Да, это классическое рекурсивное определение. Да, рекурсия - это вообще красиво. Да, педагогам, объясняющим рекурсию, этот факториал самим Господом был подарен. Но одно из правил программиста-практика - "Можно обойтись без рекурсии? Обойдись!"
3. Это уже замечание к нам обоим. Вычисление очередного члена в задаче 1 можно делать короче (эффективнее). А именно, при переходе от к-того к к+1-му разделить на к и умножить на (к*к+1)*...(к+1)(к+1)
Удачи!
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
09.02.2016, 19:31     Дано натуральное число n. Вычислить значение формулы #6
Цитата Сообщение от 8-BITOV Посмотреть сообщение
Но это чудовищно неэффективно
Я знаю. Мне было лениво 2 цикла писать.
Yandex
Объявления
09.02.2016, 19:31     Дано натуральное число n. Вычислить значение формулы
Ответ Создать тему
Опции темы

Текущее время: 03:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru