我正在写一个程序,打印出pascal的行数,它会一直打印到第14行,它的值是13.我已经将问题缩小到我所做的Choose函数,它似乎在"12 Choose X"之后产生了不正确的值,我不知道为什么.
以下是我为计算阶乘的函数(似乎工作正常)和有问题的函数编写的代码.还包括复制和粘贴在第14排之后产生的三角形.
另外,作为参考,做printf("%ld \n", choose(13, 1));
的结果是4.它应该是13.
long factorial(int value)
{
int i;
long running = 1;
for (i = 1; i <= value; i++)
{
running *= i;
}
return running;
}
long choose(int n, int k)
{
if (n < k)
return 0;
return factorial(n) / (factorial(k) * factorial(n - k));
}
1 1-4-1 2 4 7 9 9 7 4 2-1-4 1 1
10 1 5 14 29 44 44 29 14 5 1
1 4 24 88 221 399 532 532 399 221 88 24 41&-问题开始的地方.
1 12 66 220 495 792 792 495 220 66 12 1
1 1 55 165 330 462 330 330 165 55 11 1
1 10 45 120 210 252 210 120 45 10 10
19 36 84 126 84 36 36 91
18 28 56 70 56 28 8 1
17 21 35 35 21 7 1
16,15,20,15,6,1.
1 5 10 10 5 1 1
1 4 6 4 1
1 3 3 1
1 2 1.
1 1 1.
1
我曾try 将类型从Int更改为Long,以为这是数据问题,但事实并非如此.
Edit: This is the code that prints the triangle:个
int main(int argc, char **argv)
{
int i, numRows, j;
/*printf("%ld \n", factorial(13));
printf("%ld \n", choose(13, 1));*/
if (argc==2)
{
char *ptr;
numRows = strtol(argv[1], &ptr,10);
for(i=numRows; i>0; i--)
{
for(j=numRows - i; j>0; j--)
{
printf(" ");
}
printRow(i);
}
return 0;
}
return 1;
}
void printRow(int row)
{
int i;
for(i=0; i<=row-1; i++)
{
if(i!=row-1)
printf("%d ",choose(row-1, i));
else
printf("%d \n",choose(row-1, i));
}
}