可以找找哪里除以0了吗

提交时一直显示存在除以0的情况,但我找了好久也没有找出来啊……

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int a(int n);
int b(int n, int m);
int main() {
    int n; 
    while (scanf("%d",&n)) {
        if (n == 0) {
            break;
        }
            int n_2 = n / 2;//最多可以有n_2个2
            int sum = 1;//方法数
            int i;
            for (i = 1; i <= n_2; i++) {
                int n_1 = n - i * 2;//有i个2时对应的1的个数
                sum += b((n_1 + i), i);
            }
            printf("%d\n", sum);
    }
    return 0;
}
//求阶层
int a(int n) {
    int f;
    if (n == 0 || n == 1) {
        return 1;
    }
    else {
        f = a(n - 1) * n;
        return f;
    }
}
//求组合数
int b(int n, int m) {
    if (n == m)
        return 1;
    else
        return a(n) / (a(m) * a(n - m));
}


附题图

img

return a(n) / (a(m) * a(n - m));
这里调试下

【以下回答由 GPT 生成】

答案:

根据给出的代码,我们可以看到可能存在除以零的情况出现在函数b(int n, int m)中,具体地是在计算组合数时,当m等于n时,会出现除以零的情况。

为了避免这种情况的发生,我们可以在函数b中增加一个判断条件,当m等于n时,直接返回1而不进行除法运算。

下面是修改后的代码:

#include <stdio.h>

int a(int n);
int b(int n, int m);

int main() {
    int n; 
    while (scanf("%d",&n)) {
        if (n == 0) {
            break;
        }
        int n_2 = n / 2; //最多可以有n_2个2
        int sum = 1; //方法数
        int i;
        for (i = 1; i <= n_2; i++) {
            int n_1 = n - i * 2; //有i个2时对应的1的个数
            sum += b((n_1 + i), i);
        }
        printf("%d\n", sum);
    }
    return 0;
}

//求阶层
int a(int n) {
    int f;
    if (n == 0 || n == 1) {
        return 1;
    }
    else {
        f = a(n - 1) * n;
        return f;
    }
}

//求组合数
int b(int n, int m) {
    if (n == m)
        return 1;
    else if(m > n || m < 0 || n < 0)
        return 0;
    else
        return a(n) / (a(m) * a(n - m));
}

这样,我们对可能存在除以零的情况进行了处理,避免了程序运行时报错。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^