Pascals Dreieck in C

Ich bin Informatikstudent und beginne nächstes Semester den C-Kurs. Um mich ein wenig vorzubereiten, habe ich angefangen, C selbst zu lernen, und bin über eine interessante Aufgabe gestolpert, die so angelegt war, wie es mir auf den ersten Blick schien, keine sehr fortgeschrittene.

Die Aufgabe besteht darin, ein Programm zu schreiben, um den Wert einer bestimmten Position in @ zu berechne Pascals Dreieck. Und die Formel für die Berechnung lautetelement = row! / (Position! * (Zeile - Position)!)

Ich habe ein einfaches Konsolenprogramm geschrieben, das anscheinend funktioniert, bis ich es mit @ testen kan groß numbers.

Wenn dieses Programm mit Zeile 16 und Position 3 ausgeführt wird, wird der Wert als 0 berechnet, obwohl offensichtlich ist, dass es keinen solchen Wert geben kann (tatsächlich sollte der Wert 560 berechnet werden), werden alle Zellen dieses Dreiecks angenommen Ganzzahlen sein und größer als eins.

Ich nehme an, ich habe ein Problem mitSpeichern und Verarbeiten von großen Zahlen. Die Fakultätsfunktion scheint in Ordnung zu sein, und die Formel, die ich verwendet habe, funktioniert so lange, bis ich große Zahlen probiere

So weit die beste Lösung wurde hier gefunden -Wie drucken Sie ein vorzeichenloses long long int (den Formatbezeichner für ein vorzeichenloses long long int)? Verwendung der Bibliothek inttypes.h mit dem Typ uint64_t, aber es gibt mir immer noch nicht das Ergebnis, das ich brauche.

#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;
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage