Это домашнее задание, которое мне было поручено некоторое время назад ... Я добился успеха в этом самостоятельно, и единственный оставшийся сбой - это (я считаю) проблема с типами данных и переполнением.
Я пытался перейти на unsigned и double, и код соответствует и все еще принимает ввод в терминале, но, кажется, после этого зависает ... ничего не печатается, и похоже, что оно зациклено
Вот код ...
/* pascaltri.c
* A program that takes a single integer as input and returns the nth line of
* Pascal's Triangle. Uses factorial() function to help find items of
* individual entries on a given row.
*/
#include <stdio.h>
#include <stdlib.h>
long factorial(long i)
{
long fact = 1;
while(i > 1)
{
fact = fact * i;
i = i - 1;
}
return fact;
}
main(void)
{
long n;
long *nPtr;
nPtr = &n;
scanf(" %i", nPtr);
if (n >= 0)
{
long k;
long *kPtr;
kPtr = &k;
for(k = 0; k <= n; k++)
{
long ans;
long *ansPtr;
ansPtr = &ans;
ans = factorial(n) / (factorial(k) * factorial(n - k));
printf("\n %i", ans);
}
return 0;
}
return 0;
}
Он не идеален или хорош, но работает до входа в 13 (то есть в строке 14) треугольника. Кроме того, я начинаю получать бессмысленные и даже отрицательные значения, разбросанные по всем возвращаемым значениям ... гораздо большие значения нарушают код и ничего не возвращают, кроме сообщения об ошибке выхода.
Любые идеи о том, как я могу исправить эту проблему? Я долго смотрел на экран, чтобы действительно что-то увидеть сам. Кроме того, это не существенно, но я хотел бы напечатать мои возвращаемые значения в одной строке, а не разделять их символом новой строки.
1 5 10 10 5 1
Будет ли самый простой способ загрузить значения в массив по мере их вычисления, а затем распечатать массив? Или есть встроенный способ, которым я могу сказать, что оператор печати должен находиться только в одной строке?