1.组合数问题
首先要解决溢出问题,在返回long long之后还要分步骤乘法..
long long C(int N, int M) {
long long sum = 1;
for(int i=1;i<=M; i++) {
sum=sum*(N-M+i)/i;
}
return sum;
}
2.判断素数
循环结束的条件涉及到sqrt函数,需要考虑精度问题..常用的就是floor(x+0.5)..
int is_prime(int x)
{
int i;
int m;
m=floor(sqrt(x)+0.5);
for(i=2;i<=m;i++)
if(x%i==0) return 0;
return 1;
}
3.栈溢出的问题
每次递归调用都需要往调用栈里增加一个栈帧,久而久之就会越界,建议把较大的数组放在main函数外,是因为局部变量也会存在于堆栈段中,增加栈溢出的可能性。