Нахождение факториала - исправить ошибки в коде - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите исправить прогу, она должна искать факториал.а потом факториал предствить ввиде последовательности 3 чисел.если это конечно возможно
#include <conio.h> 
#include <math.h> 
#include <iostream.h> 

void main(void) 
{ int iNum;
int i; 
clrscr(); 
cout<<"Введите натуральное число: "; 
cin>>iNum; 
iNum = abs(iNum); 
if (iNum>=2) {
for (i = 2; i<=iNum; i++) 
{ 
if(i%2 != 0) { 
if(i%3 != 0) { 
if(i%5 == 0) cout<<i<<"\n"; 
} else cout<<i<<"\n"; 
} else cout<<i<<"\n"; 
} 
} else cout<<"Чисел не найдено!\n"; 
}

Решение задачи: «Нахождение факториала - исправить ошибки в коде»

textual
Листинг программы
#include <iostream.h>
//Руссификация
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='?')
            stream<<char(241);
        else if(*ps=='?')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
unsigned long factorial(int num);
void get_sequence(unsigned long num, int divider);
void get_multypliers(unsigned long num);
 
int main()
{
    unsigned long fact = 0;
    cout<<"Введите число: ";
    int num;cin>>num;
    cout<<"Факториал %d равен :"<<(fact = factorial(num))<<"\r\n";
    cout<<"Последовательность чисел\r\n";
    get_sequence(fact, num);
    cout<<"\r\n";
    cout<<"Последовательность простіх сомножителей\r\n";
    get_multypliers(fact);
    cout<<"\r\n";
    cout<<"Press any key to continue\r\n";
    char chr;cin>>chr;
    return 0;
}
 
unsigned long factorial(int num)
{
    unsigned long RetVal = 1;
    if(0 < num - 1)
        RetVal *= num*factorial(num - 1);
    return RetVal;
}
 
void get_sequence(unsigned long num, int divider)
{
    cout<<divider;
    if(0 < divider - 1)
        get_sequence(num/divider, divider - 1);
}
 
void get_multypliers(unsigned long num)
{
    unsigned long rez = 1;
    for(int i = 1,j,k; i < 10; i++)
    {
        rez = i;
        for(j = 1; j < 10; j++)
        {
            if(j != i)
            {
                rez *= j;
                for(k = 1; k < 10; k++)
                {
                    if(k != i && k != j)
                    {
                        rez *= k;
                        if(rez == num)
                        {
                            cout<<i<<j<<k;
                            return;
                        }
                        rez /= k;
                    }
                }
                rez /= j;
            }
        }
    }
}

Объяснение кода листинга программы

  1. Сначала мы видим, что программа включает файл iostream.h, который содержит функции для ввода и вывода данных в стандартный поток ввода/вывода.
  2. Далее, оператор << перенаправляется таким образом, чтобы принимать два аргумента: поток и строку. Затем он проходит по каждому символу строки и, в зависимости от значения символа, записывает соответствующий символ в поток. Эта функция используется для отображения чисел в виде текста.
  3. Функция main() начинается с запроса у пользователя ввода числа. Затем вызывается функция factorial(), чтобы вычислить факториал числа, введенного пользователем. Факториал выводится на экран, а затем вызывается функция get_sequence(), чтобы отобразить последовательность чисел, которые являются делителями факториала. Затем вызывается функция get_multypliers(), чтобы отобразить последовательность простых множителей факториала. Наконец, программа завершается, когда пользователь нажимает любую клавишу.
  4. Функция factorial() вычисляет факториал числа, используя рекурсию. Если число больше 1, то факториал числа вычисляется путем умножения числа на факториал числа, уменьшенного на 1. Если число равно или меньше 1, то факториал числа равен 1.
  5. Функция get_sequence() отображает последовательность чисел, которые являются делителями заданного числа. Если делитель больше 1, то функция вызывается рекурсивно для вычисления следующего делителя. Если делитель равен 1, то функция завершается.
  6. Функция get_multypliers() вычисляет простые множители заданного числа. Для этого используется цикл for, который проходит по числам от 1 до 9. Для каждого числа проверяется, является ли оно простым множителем заданного числа. Если число является множителем, то оно умножается на заданное число, и функция вызывается рекурсивно для вычисления простых множителей нового числа. Если число не является множителем, то оно делится на заданное число, и функция вызывается рекурсивно для вычисления простых множителей нового числа. Когда функция находит все простые множители заданного числа, она выводит их на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5