【问题标题】:C Programming question about power, factorial, and combination关于幂、阶乘和组合的 C 编程问题
【发布时间】: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


【解决方案1】:

如果确定要进行整数运算,则需要确保除法前分母不为零:

if (denominator != 0)
    ans = ans + (numerator/denominator);

在外层for循环的第一次迭代中,i=1,表示分母循环只会执行一次,设置分母为:1^n * C(n 1) / n! = 1/(n-1)!,整数除法为0(除非n=1或@987654325 @)。

如果您不打算执行整数运算,则将denominator 的类型更改为double

double denominator = 0, numerator = 0;

【讨论】:

  • 谢谢,检查分母是否为零。另外,我明白了它的逻辑谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
相关资源
最近更新 更多