С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784

Ошибка в цикле

03.09.2015, 11:29. Показов 1495. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Нужно вычислить факториал неотрицательного числа. К примеру:
n! = n * (n - 1) * (n - 2) * ... (для значений n > 1)
n! = 1 (для n = 0 or n = 1)
For example:
5! = 5 * 4 * 3 * 2 * 1; 5! == 120;
У меня выводит 80. Полагаю, что ошибка в цикле. Но где она?
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
int n;
    int i = 1; // (n - i)
    int f;
    int total = 0;
 
    cout << "Enter the number: ";
    cin >> n;
 
    f = n; 
 
    while (n > 0)
    {
        if (f == n)
        {
            f = f * (n - i);
            i++;
            n--;
        }
        else
            if (n < f)
        {
            total = f * (n - i);
            i++;
            n--;
        }
    }
 
    cout << total;
Добавлено через 3 минуты
i декрементирую - ошибка. Сейчас исправлю и посмотрю.

Добавлено через 1 минуту
Если сделать
C++
1
i++;
что вполне логично, ответ вообще -80

Добавлено через 7 минут
Здесь, наверное, не так:
C++
1
total = f * (n - i);
а так?
C++
1
total = total + f * (n - i);
Добавлено через 1 минуту

Не по теме:

Запутался.. В общем, жду людей поумнее чем я.

0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2015, 11:29
Ответы с готовыми решениями:

Ошибка в цикле
Суть задачи: Разработать программу для приближенного вычисления величины y=Ʃ(1/((2*n+1)*(2*n-1))) , n=1,2,3,... Процесс...

Ошибка в цикле
Задание: Написать цикл программы. от К=1 до К=10 #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main () ...

Ошибка в цикле
Суть программы: создаёт динамический список, каждый новый элемент списка заносится в конец. Ну, там далее ещё функций по мелочи, но не...

7
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
03.09.2015, 11:32
А не проще с помощью массива?
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
03.09.2015, 11:33
C++
1
2
3
4
5
int factor(int x){
   int n = 1;
   for (int i = 2; i <= x; ++i) n *= i;
   return n;
}
А у Вас что-то совсем не то.
1
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
03.09.2015, 11:36  [ТС]
Цитата Сообщение от Senarist Посмотреть сообщение
А не проще с помощью массива?
Не проходил массивы еще, нужно с циклом while делать.
FraidZZ, а можете циклом while написать? Чтоб мне более понятно было.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
03.09.2015, 11:38
Лучший ответ Сообщение было отмечено kalonord как решение

Решение

здесь
Цитата Сообщение от kalonord Посмотреть сообщение
total = total * (n - i);
и здесь
Цитата Сообщение от kalonord Посмотреть сообщение
i++; n--;
множитель факториала фактически два раза подряд уменьшается на 1
Выберите что-то одно:
например
C++
1
2
3
4
5
while (n > 0)
    {
            total = total  * (n - i);
            i++;
    }
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
03.09.2015, 11:39
C++
1
2
3
4
5
6
7
int fakt(int n)
{
   int f=1;
   while (n>1)
      f*=n--; 
   return f;
}
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
03.09.2015, 11:55
Пример отсюда
C++
1
2
3
4
5
6
  int factorial(int n) {
    if (n < 0 ) {
        return 0;
    }
      return !n ? 1 : n * factorial(n - 1);
  }
Добавлено через 14 минут
kalonord, с while
C++
1
2
3
4
5
6
7
8
int factorial(int x){
    int ans = 1;
    while (x > 0) {
        ans *= x;
        x--;
    }
    return ans;
}
0
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
03.09.2015, 14:12  [ТС]
Всем спасибо.
Kuzia domovenok, Вам отдельное. Не знаю почему я вообще декрементировал постоянно n, по формуле ведь всё видно.
В итоге написал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int n;
    int i = 0; // (n - i)
    int f;
 
    cout << "Enter the number: ";
    cin >> n;
 
    f = n;
 
    while (i < n - 1)
    {
            f *= (n - ++i);
    }
Добавлено через 1 час 29 минут
Напишите программу, которая приближенно вычисляет значение математической константы e, используя формулу:
e=1+ 1/1! + 1/2! + 1/3!
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
double e;  // need to find it
    double total = 0;
    int items; // how many items of number?
    int i = 0;
    int f;
    int n = 1;
 
    cout << "Enter number of items: ";
    cin >> items; // for example, 5
 
    while (items)
    {
        f = n;
 
        if (n == 0 || n == 1)
        {
            f = 1;
        }
        else
        {
            while (i < n - 1)
            {
                f *= (n - ++i);
            }
        }
 
        total += 1.0 / f;
        n++;
        i = 0;
 
        items--;
    }
 
    e = 1 + total;
Вроде правильно решил, мб понадобится кому.

Кстати, вопрос на счёт строки:
C++
1
total += 1.0 / f;
Так можно делать или лучше объявлять переменную f типом double?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2015, 14:12
Помогаю со студенческими работами здесь

Ошибка в цикле while
Привет всем! Ниже приведен код программы, в программе две функции одна change() переводит Ф.И.О в формат фамилия - инициалы, а вторая...

Ошибка в цикле while
//--------------------------------------------------------------------------- #pragma hdrstop #include &lt;locale&gt; #include &lt;stdio.h&gt; ...

Ошибка в цикле
Помогите найти ошибку в цикле, пожалуйста #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include...

Ошибка в цикле
(Задание - см. вложение) Почему функция fill_array() возвращает неправильные значения? Когда ввожу 1 или 2 числа, выводит цифру 1;...

Ошибка в цикле
Хочу создать массив из 10 чисел. void main() { char a,i; for (i=0; i&lt;10; i++) { printf...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru