Member 13338308 Ответов: 4

Что-то не так с этой моей программой для малых факториалов?


Я пытался решить эту проблему кодирования на codechef о печати небольших факториалов (код проблемы: FCTRL2). Он показывает мой код ниже как неправильный. Я всего лишь новичок и хотел бы знать, требуется ли больше деталей в моем ответе или мой алгоритм ошибочен.

Что я уже пробовал:

#include<iostream>
 
using namespace std;
 
int main()
{
    int a[100] , t; // a[100] - Array for storing inputted numbers.
    cin >> t;      // t - The number of numbers to be stored in array a.

    for( int i = 0 ; i < t ; i++ )       // Loop for storing numbers in 'a'.
        cin >> a[i];
 
    for( int i = 0 ; i < t ; i++ )      // Loop for accessing numbers stored in 'a' one 
    {                                  // by one.
        double  fac = 1;
        
        for ( int j = a[i] ; j > 0 ; j-- )  // Loop for finding factorial of number
            fac = fac * j;                 // a[i] which is equated as j.

        cout << endl << fac << endl;      // Printing factorial.
    }
}

4 Ответов

Рейтинг:
2

Patrice T

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

После этого все зависит от точного запроса и использования типа данных.
один double никогда не будет содержать точное значение факториала максимального значения.
- Использование long будет содержать более точный факториал, чем a double, но ut все еще ограничен.
- Использование BigInt будет содержать точный результат любого факториала.

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


Рейтинг:
2

Richard MacCutchan

Вы вычисляете факториал, беря произведение числа раз каждого меньшего значения до 1. Таким образом, факториал 4 равен 4 х 3 х 2 х 1.Ваша программа этого не делает. И вы, конечно же, не должны использовать тип с плавающей запятой для вычисления интеграла.


Member 13338308

я думаю, что моя программа вычисляет факториал правильно, но проблема заключается в переменной double fac, так как только с помощью double я получаю какой-либо результат, даже использование 'long long int' дает факториал 99 как 0.

Richard MacCutchan

Удаленный

Richard MacCutchan

Просто используйте тип int для вычисления; он может содержать числа размером до 2,147,483,647, то есть максимум факториал 12. Смотреть также долго (Справочник по c#) | Майкрософт документы[^].

Member 13338308

Вот в чем проблема, мне нужно рассчитать факториалы до 100! Мне нужна переменная biginteger для ее хранения, поиск в интернете для создания такой переменной. Кстати, спасибо.

Richard MacCutchan

Возможно десятичное число (Справочник по c#) | Майкрософт документы[^Но я сомневаюсь, что этого достаточно для факториала 100. Если вы хотите работать с такими большими значениями, то вам, вероятно, нужен двойной тип, но это означает, что вы также теряете точность.

Рейтинг:
1

OriginalGriff

Здесь есть некоторые проблемы:
Почему вы считываете числа с входных данных и умножаете их вместе? Это не обязательно факториал ... что делать, если я наберу 5, то 1,1,1,1,1? равен ли факториал 5 результату, который вы даете?

Насколько велико целое число? Ответ: это зависит от системы, компилятора, иногда от параметров, которые вы даете при компиляции. Но ... даже если это 64-битное целое число, оно не может содержать 21 факториал, так как они становятся очень большими, очень быстро - так что выделение 100 целых чисел немного излишне! :смеяться:

Но главная проблема в том, что это не работает.

x! = x * (x - 1)!
Это то, что вы должны попытаться сделать...


Patrice T

- Почему ты считываешь числа с входных данных и умножаешь их вместе? Это не обязательно факториал ... что делать, если я наберу 5, то 1,1,1,1,1? равен ли факториал 5 результату, который вы даете?"
Привет ОГ
Где вы видели, чтобы этот код умножал все входные данные вместе ?

Member 13338308

Я не думаю, что умножаю все входные данные вместе. Я назначаю их как int j, чтобы найти их факториал. Вы пробовали код? Потому что я всегда получаю 5 факториалов 120.

Рейтинг:
0

CPallini

Вы не можете использовать double чтобы сообщить все цифры результата. Вы должны использовать, возможно, ручной работы, big integer класс. Аве взгляни на Учебник Для Малых Факториалов | Codechef[^].