Я думаю, что мой код все правильно, но он не работает

Я закодировал это, чтобы показать мне это:

1 + (1/2!) + (1/3!) +… + (1 / n!)
если (н < 10)

#include <iostream>
using namespace std;
int main() {
int n;
float factn=1,m,sum;
cout<<"enter n\n";
cin>>n;
if(n<10&&n>=0){
do{
factn=factn*n;
m=1/factn;
sum=sum+m;
n--;
}while(n>=1);
cout<<sum;
}
else{
cout<<"error!\n";
}
return 0;

}

Этот код должен показать это:

(н < 10) 1 + (1/2!) + (1/3!) +… + (1 / n!)

В чем проблема?
Возвращает неверные значения 🙁

-5

Решение

Вы не инициализировали сумму = 0 в начале. Переменная sum имеет случайное значение, которое хранится в Ram в том месте памяти, где должна быть сумма.

0

Другие решения

В коде есть две проблемы. Первый, sum не инициализируется, поэтому любой результат не будет иметь никакого значения. Во-вторых, цикл идет не в ту сторону. Чтобы вычислить последовательные факториалы, нужно начать с 1, затем перейти к 2, затем к 3 и т. Д .; этот цикл начинается в n, затем переходит к n-1, затем n-2и т. д. Измени это do... while цикл, чтобы выглядеть так:

for (int i = 0; i < n; ++i) {
// do the calculation for i
}
2

Потратьте время, чтобы исправить ваше форматирование. Помимо того, что код становится красивым и читабельным, он часто помогает сосредоточить ваши мысли на структуре и логике программы. Возможно, вы могли бы обнаружить проблему с реализацией формулы в этом случае.

Cin может дать вам статус, если введено правильное значение. Более того, если вы хотите повторить ввод, то есть статус должен быть очищен.
Ваша формула может быть реализована с помощью цикла for () с использованием локальных переменных. На самом деле не имеет значения, какой тип цикла вы используете, вы можете использовать прямое объявление и использовать, в то время как, если хотите, просто for () разрешает некоторые объявления и операторы, включенные в его «заголовок»:

#include <iostream>
using  std::cin;
using  std::cout;
int main()
{
int n;

cout << "enter n\n";
bool res = cin >> n;  // false if input was incorrectly parsed
if (res)
res = (n<10) && (n>=0);

if( res )
{
float sum = 1; // starting value for sum
for( int k = 1, j = 1; k < n; k++)
{
j = j * (j + 1);  // j accumulates factorial
sum = sum + 1.f / j;
}
cout<< sum << "\n";
}
else
{
cout<<"error!\n";
}
return 0;
}

На самом деле есть способ вычислить факториал без цикла, используя экспоненциальные функции.

0

Вы можете использовать цикл простой с

for (int i = 0; i < n; i++) 
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector