输入样例2 7,输出是result = -nan,有问题,怎么改
时间: 2024-09-26 16:11:24 浏览: 35
Result.rar_ant 2-opt cvrp_最后一公里_送货
输入样例`7, 0` 导致了错误的结果 `-nan`,这是因为当你尝试计算 `fact(0)` 除以 `fact(7)` 或者 `fact(7)` 除以 `fact(7 - 0)`(即 `fact(7)` 除以 `fact(7)`),由于 `fact(0)` 的定义是 `1`(不是 `0!`),这个除数为零的情况会导致 `NaN`(Not a Number)。
为了修正这个问题,你需要添加边界条件检查来防止除以零的情况发生。在 `fact` 函数内部,你可以检查 `x` 是否小于等于0,如果是则返回一个特殊的值(比如 `INFINITY` 或者 `-INFINITY`),而不是使用默认的递归逻辑。这里是一个修改后的版本:
```c
#include<stdio.h>
#include<math.h> // 添加这个头文件以便使用 INFINITY
#define INFINITY DBL_MAX // 使用双精度最大值表示无穷大
double fact(int x){
if(x <= 0){
return INFINITY; // 返回一个非零常数值表示分母为0的情况
}else{
return x*fact(x-1);
}
}
int main(){
int m, n;
scanf("%d,%d",&m,&n);
// 避免除以零的情况
if(fact(n) == INFINITY || fact(m-n) == INFINITY){
printf("result is undefined for this input.\n");
} else {
double sum = fact(n) / (fact(m) * fact(n-m));
printf("result = %lf", sum);
}
return 0;
}
```
在这个修订版中,当遇到分母为0的情况时,会提示 "result is undefined for this input."。
阅读全文