Треугольник Паскаля в С

Я студент компьютерных технологий и в следующем семестре собираюсь начать курс C Поэтому, чтобы немного подготовиться, я начал самостоятельно изучать C и наткнулся на интересное задание, предназначенное, как мне показалось на первый взгляд, не очень продвинутого уровня.

Задача состоит в том, чтобы написать программу для вычисления значения заданной позиции вТреугольник Паскаля, И формула, приведенная для расчета, записывается в видеэлемент = строка! / (позиция! * (строка - позиция)!)

Я написал простую консольную программу, которая работает нормально, пока я не протестирую ее сбольшой номера.

При попытке этой программы со строкой 16 и позицией 3 она вычисляет значение как 0, хотя очевидно, что такого значения быть не может (на самом деле оно должно вычислять значение как 560), все ячейки этого треугольника должны быть целыми числами и быть больше единицы.

Я полагаю, у меня проблема схранение и обработка большого количества, Кажется, что факториальная функция работает хорошо, и формула, которую я использовал, работает, пока я не попробую большие числа

Пока лучшее решение было найдено здесь -Как вы печатаете unsigned long long int (спецификатор формата для unsigned long long int)? используя библиотеку inttypes.h с типом uint64_t, но она по-прежнему не дает мне нужного результата.

#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

void clear_input(void);
uint64_t factorial(int x);

int main()
{
    // Printing
    printf("This program computes the value of a given position in Pascal's Triangle.\n");
    printf("You will be asked for row and position of the value.\n");
    printf("Note that the rows and positions starts from 0.\n");
    printf("\n");
    printf("     1          * 0 \n");
    printf("    1 1         * 1 \n");
    printf("   1 2 1        * 2 \n");
    printf("  1 3 3 1       * 3 \n");
    printf(" 1 4 6 4 1      * 4 \n");
    printf(" ****************   \n");
    printf(" 0 1 2 3 4          \n");
    printf("\n");

    // Initializing
    int row, pos;

    // Input Row
    printf("Enter the row: ");
    scanf("%d", &row);
    clear_input();

    // Input Position
    printf("Enter the position in the row: ");
    scanf("%d", &pos);
    clear_input();

    // Initializing
    uint64_t element, element_1, element_2, element_3, element_4;

    // Previously written as -> element = ( factorial(row) ) / ( factorial(pos) * factorial(row - pos) );
    // Doesn't fix the problem
    element_1 = factorial(row);
    element_2 = factorial(pos);
    element_3 = factorial(row - pos);
    element_4 = element_2 * element_3;

    element = element_1 / element_4;

    // Print result
    printf("\n");
    printf("%"PRIu64"\n", element_1);   // Temporary output
    printf("%"PRIu64"\n", element_2);   // Temporary output
    printf("%"PRIu64"\n", element_3);   // Temporary output
    printf("%"PRIu64"\n", element_4);   // Temporary output
    printf("\n");
    printf("The element is %"PRIu64"", element);
    printf("\n");

    return 0;
}

void clear_input(void)                                          // Temporary function to clean input from the keyboard
{
  while(getchar() != '\n');
}

uint64_t factorial(int x)                                       // Function to calculate factorial
{
    int f = 1, i = x;
    if (x == 0) {
        return 1;
    }
    while (i != 1) {
        f = f * i;
        i = i - 1;
    }
    return f;
}

Ответы на вопрос(3)

Ваш ответ на вопрос