Задача: Даны натуральное число [latex]n[/latex] и действительное [latex]x[/latex]. Найти:
[latex]\sum_{i=1}^{n}\frac{x^{i}}{i!}[/latex]
Тесты:
Число [latex]x[/latex], возводимое в степень | Кол-во шагов [latex]n[/latex] | Результат result |
5 | 3 | 38.(3) |
4 | 12 | 53.5832 |
20 | 5 | 34886.7 |
0 | 0 | 0 |
10 | 10 | 12841.3 |
Решение: Для решения данной задачи надо было провести численный анализ. Каждый раз высчитывать и прибавлять результат нельзя, т.к программа будет работать очень долго. По-этому стоит рассмотреть два значения: текущее и последующее, [latex]x_{n}[/latex] и [latex]x_{n+1}[/latex]. Поделим одно на другое:
[latex]\frac{x_{n+1}}{x_{n}}=\frac{x^{i+1}*i!}{(i+1)*i!*x^{i}}=\frac{x}{i+1}[/latex]
Поскольку сумму ряда считаем с 1, то делить будем на [latex]i[/latex], а не на [latex](i+1)[/latex].
Код на С++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <stdio.h> using namespace std; int main () { double result=0, x, x_tmp=1; //заводим счётчик суммы, x, n int n; cin>>x>>n; //вводим x и n for (int i=1; i<=n; i++ ){ //умножаем временную переменную на x/i. прибавляем её к сумме ряда. x_tmp*=x/i; result += x_tmp; } cout<<result; //выводим результат return 0; } |
Код на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.lang.*; import java.io.*; class Count { public static void main (String[] args) { double result = 0, x, x_tmp = 1; int n; Scanner sc = new Scanner (System.in); x = sc.nextDouble(); n = sc.nextInt(); for (int i=1; i<=n; i++ ){ x_tmp*=x/i; result += x_tmp; } System.out.println (result); } } |
Для проверки правильности работы кода, воспользуйтесь ссылкой.
Зачтено