gpt4 book ai didi

c - 大输出的浮点异常

转载 作者:行者123 更新时间:2023-11-30 17:30:12 26 4
gpt4 key购买 nike

请告诉我为什么我在这段代码中遇到浮点异常?它对于像 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));
}

最佳答案

我看到你正在计算 nC1 + nC2 + nC3 + ... nCn。为此,您可以使用以下结果:

nC0 + nC1 + nC2 + nC3 + ... nCn = 2 ^ n
nC1 + nC2 + nC3 + ... nCn = 2 ^ n - 1

以下是执行相同操作的代码

#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;
}

关于c - 大输出的浮点异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25229467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com