我正在编写一个程序,用于打印帕斯卡三角形的行数,它可以正常工作到第14行,该行对应的是13个值。我已经缩小了问题范围,发现是我编写的“N选K”函数出现了问题,在“12选X”之后产生了错误的值,但我不知道原因。
以下是我编写的计算阶乘的函数(似乎正常工作)和出现问题的函数的代码。还附上了复制粘贴的第14行之后生成的三角形。
另外,作为参考,执行
1 1 -4 -1 2 4 7 9 9 7 4 2 -1 -4 1 1 1 0 1 5 14 29 44 50 44 29 14 5 1 0 1 1 4 24 88 221 399 532 532 399 221 88 24 4 1 <--------- Where the issue starts. 1 12 66 220 495 792 924 792 495 220 66 12 1 1 11 55 165 330 462 462 330 165 55 11 1 1 10 45 120 210 252 210 120 45 10 1 1 9 36 84 126 126 84 36 9 1 1 8 28 56 70 56 28 8 1 1 7 21 35 35 21 7 1 1 6 15 20 15 6 1 1 5 10 10 5 1 1 4 6 4 1 1 3 3 1 1 2 1 1 1 1
1 1 -4 -1 2 4 7 9 9 7 4 2 -1 -4 1 1 1 0 1 5 14 29 44 50 44 29 14 5 1 0 1 1 4 24 88 221 399 532 532 399 221 88 24 4 1 <---------问题开始的地方。 1 12 66 220 495 792 924 792 495 220 66 12 1 1 11 55 165 330 462 462 330 165 55 11 1 1 10 45 120 210 252 210 120 45 10 1 1 9 36 84 126 126 84 36 9 1 1 8 28 56 70 56 28 8 1 1 7 21 35 35 21 7 1 1 6 15 20 15 6 1 1 5 10 10 5 1 1 4 6 4 1 1 3 3 1 1 2 1 1 1 1
我尝试将类型从Int更改为Long,以为这是一个数据问题,但事实并非如此。
以下是我编写的计算阶乘的函数(似乎正常工作)和出现问题的函数的代码。还附上了复制粘贴的第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 1 0 1 5 14 29 44 50 44 29 14 5 1 0 1 1 4 24 88 221 399 532 532 399 221 88 24 4 1 <--------- Where the issue starts. 1 12 66 220 495 792 924 792 495 220 66 12 1 1 11 55 165 330 462 462 330 165 55 11 1 1 10 45 120 210 252 210 120 45 10 1 1 9 36 84 126 126 84 36 9 1 1 8 28 56 70 56 28 8 1 1 7 21 35 35 21 7 1 1 6 15 20 15 6 1 1 5 10 10 5 1 1 4 6 4 1 1 3 3 1 1 2 1 1 1 1
1 1 -4 -1 2 4 7 9 9 7 4 2 -1 -4 1 1 1 0 1 5 14 29 44 50 44 29 14 5 1 0 1 1 4 24 88 221 399 532 532 399 221 88 24 4 1 <---------问题开始的地方。 1 12 66 220 495 792 924 792 495 220 66 12 1 1 11 55 165 330 462 462 330 165 55 11 1 1 10 45 120 210 252 210 120 45 10 1 1 9 36 84 126 126 84 36 9 1 1 8 28 56 70 56 28 8 1 1 7 21 35 35 21 7 1 1 6 15 20 15 6 1 1 5 10 10 5 1 1 4 6 4 1 1 3 3 1 1 2 1 1 1 1
我尝试将类型从Int更改为Long,以为这是一个数据问题,但事实并非如此。
long
的大小是多少?阶乘在计算到**12!**后会超过32位。 - undefined(1*2*3*4*5) / (1*2*3) = 4*5
。 - undefined