[英]floating point exception for big output
Please tell me why i am getting floating point exception in this code?It is working well for small numbers like n=1 or 2 but if i put n= 40 or a number bigger than that its giving me floating point exception. 请告诉我为什么我在这段代码中会出现浮点异常?它对于n = 1或2这样的小数字效果很好,但是如果我将n = 40或大于它给我浮点异常的数字,效果很好。
#include<stdio.h>
int fact(unsigned long long int);
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
unsigned long long int n,k=0,i=0,sum=0;
scanf("%llu",&n);
for(i=1;i<=n;i++)
{
k=i;
if(n==k)
sum+=1;
else
sum+=fact(n)/(fact(k)*fact(n-k));
}
printf("%llu\n",sum%1000000007);
}
return 0;
}
int fact(unsigned long long int n)
{
if(n==1)
return 1;
else
return (n*fact(n-1));
}
I see that your are calculating nC1 + nC2 + nC3 + ... nCn. 我看到您正在计算nC1 + nC2 + nC3 + ... nCn。 For this you can use the following result :
为此,您可以使用以下结果:
nC0 + nC1 + nC2 + nC3 + ... nCn = 2 ^ n
nC1 + nC2 + nC3 + ... nCn = 2 ^ n - 1
Following is the code to do the same 以下是执行相同操作的代码
#include<stdio.h>
#define MOD 1000000007
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
unsigned long long int n, i = 0, sum = 1;
scanf("%llu", &n);
for(i = 1; i <= n; i++)
{
sum = sum << 1;
sum = sum % MOD;
}
sum = sum - 1;
printf("%llu\n", sum % MOD);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.