我写了一个程序,它应该打印牛顿二项式的值。number - 测试数, t[i][0] - n
, t[i][1] - k
. 对于小数字 n 和 k 似乎没问题,但是当我想输入更大的数字时,它会打印0
或1
小的负整数。基本上我使用了 long int 而不是 int 所以它应该适用于更大的数字。你能解释一下为什么会这样吗?
#include <iostream>
long fact(int x);
using namespace std;
int main()
{
int number;
cin>>number;
int t[number][2];
for(int i=0; i<number; i++)
{
cin>>t[i][0];
cin>>t[i][1];
if (t[i][0]<t[i][1]) return 0;
}
for(int i=0; i<number; i++)
{
cout<<fact(t[i][0])/(fact(t[i][0]-t[i][1])*fact(t[i][1]))<<endl;
}
return 0;
}
long fact(int x)
{
long factt=1;
for(int i=1; i<=x; i++)
{
factt=factt*i;
}
return factt;
}
@编辑
谢谢你的建议。我尝试实现这一点,但它不能很好地计算二项式。它为 n=4 和 k=2 打印 11。你可以看看这个吗?
#include <iostream>
long fact(int n, int k);
using namespace std;
int main()
{
int number;
cin>>number;
int t[number][2];
for(int i=0; i<number; i++)
{
cin>>t[i][0];
cin>>t[i][1];
if (t[i][0]<t[i][1]) return 0;
}
for(int i=0; i<number; i++)
{
cout<<fact(t[i][0],t[i][1])<<endl;
}
return 0;
}
long fact(int n, int k)
{
if(n==0 || n==k)
return 1;
else if(n>k)
return fact(n-1,k-1)+fact(n-1, k);
else
return 0;
}