杭电acm2200问题;有哪位高手看看我哪里有问题,就是过不去,我觉得没有问题啊! 非常感谢!!

2024-11-05 13:28:23
推荐回答(2个)
回答1:

没悬赏分。。。
最后结果在64位整数范围内
64位整数范围不能用double
是 __int64 . 用 "%I64d" 读入。或者 long long ,"lld".
还有。
按照你程序计算组合数的方法。。。 计算 d(n)肯定会越界。
应该按照组合数递推公式打一个表出来,规模不用太大。

回答2:

#include
double c(double a)
{
double i,s=1;
for(i=1;i<=a;i++)
s=s*i;
return s;
}
double f(double n,double i)
{
return c(n)/( c(n-i)*c(i) );
}
void main()
{
double i,n,sum;
while(scanf("%lf",&n)!=-1)
{
sum=0;
for(i=2;i<=n;i++)
sum=sum+(i-1)*f(n,i);
printf("%.0f\n",sum);
}
}