【发布时间】:2011-11-28 07:14:03
【问题描述】:
这是我前段时间分配的一个家庭作业项目...我自己已经成功地做到了这一点,我唯一留下的问题是(我相信)数据类型和溢出问题。
我尝试切换到无符号和双精度,代码符合并仍然接受终端中的输入,但之后似乎挂断了......没有打印任何内容,看起来它陷入了循环。
这里是代码...
/* 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
最简单的方法是在计算值时将值加载到数组中,然后打印该数组吗?或者有没有一种内置的方法可以告诉打印语句只出现在一行上?
【问题讨论】:
-
factorial(n) 可以很大,但是 factorial(k)factorial(n-k) 也可以。帕斯卡三角形的秘密在于,您无需计算阶乘即可逃脱,请在此处查看我的答案:stackoverflow.com/questions/16709748
标签: c pascals-triangle