これは私が以前に割り当てられた宿題プロジェクトです...私はこれまで自分で成功しました、そして私が残した唯一の問題はデータ型とオーバーフローの問題です(私は信じています)。
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行に出力したいと思います。
1 5 10 10 5 1
計算時に値を配列にロードしてから、配列を出力するのが最も簡単な方法でしょうか。または、printステートメントを1行だけで発生させるように指示できる組み込みの方法はありますか?