繁体   English   中英

C 关于幂、阶乘、组合的编程题

[英]C Programming question about power, factorial, and combination

我被分配了一个关于用功率因子和组合求解方程的问题。 在这个问题中,我被分配到使用 for 循环的代码功率和阶乘。 我想我已经做到了(他们正在一件一件地工作)。 同样在主function中,我需要计算一个方程。 所以这是我的代码,它看起来对我来说是正确的。 但最终我得到一个“浮点异常(核心转储)”错误。 任何帮助都会很好,我实际上不想要正确的答案,如果你能解释为什么我会收到这个错误,那会很有帮助。 谢谢你。 (如果有办法分享照片,我会因为声誉问题而无法上传照片。)

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

如果您确定要执行 integer 算术,则需要确保在除法之前分母不为零:

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

在外部 for 循环的第一次迭代中, i=1 ,这意味着分母循环将只执行一次,将分母设置为: 1^n * C(n 1) / n! = 1/(n-1)! 1^n * C(n 1) / n! = 1/(n-1)! ,在 integer 除法中为 0(除非n=1n=2 )。

如果您不打算执行 integer 算术,则将denominator的类型更改为double

double denominator = 0, numerator = 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM