【发布时间】:2021-04-06 22:04:41
【问题描述】:
我被分配了一个关于使用功率因子和组合求解方程的问题。在这个问题中,我被分配到使用 for 循环的代码功率和阶乘。我想我已经做到了(他们正在一件一件地工作)。同样在主函数中,我需要计算一个方程。所以这是我的代码,它看起来对我来说是正确的。但最终我得到一个“浮点异常(核心转储)”错误。任何帮助都会很好,我实际上不想要正确的答案,如果你能解释为什么我会收到这个错误,那会很有帮助。谢谢你。 (如果有办法分享照片,我会因为声誉问题而无法上传照片。)
#include <stdio.h>
int factorial(int n){
int i,result=1;
for(i=1; i<=n; ++i){
result = result*i;
}
return result;
}
int power(int x,int y){ // base -> x , exponent -> y
int result=1;
for(int i=1;i<=y;i++) // multiply x, y times
result*=x;
return result;
}
int combination(int n,int r){
return factorial(n)/(factorial(r)*factorial(n-r));
}
int main()
{
double ans=0;
int n;
printf("Enter n : ");
scanf("%d",&n);
for(int i=1;i<=n;i++){
int denominator = 0,numerator = 0; // set denominator, numerator to 0 because we are going to add to them
for(int z=1;z<=n-i;z++)
numerator += power(i,z);
for(int j=1;j<=i;j++)
denominator += ((power(j,n)*combination(n,j))/factorial(n));
ans = ans + (numerator/denominator);
}
printf("Resut is : %f",ans);
return 0;
}
【问题讨论】:
-
你可能在某处被零除
-
需要优化,否则会出现整数溢出。
-
此代码也不会编译。您定义了
answer,但没有定义ans。所以不是代码可以给出这个错误。请发帖minimal reproducible example。 -
请阅读ericlippert.com/2014/03/05/how-to-debug-small-programs 并尝试自己找出问题所在。如果你不明白它为什么会发生,你至少可以解释它发生在哪里 - 哪个操作失败了,输入值是什么。顺便说一句:拼写为
numerator。 -
您的所有除法可能都需要使用
double,而不是int,否则只要分母大于分子,您就会得到零
标签: c