long Jiecheng(int i) { if(i == 1) return 1; else return i * Jiecheng(i-1); }C语言代码,解决一下溢出的问题
时间: 2024-02-25 10:52:27 浏览: 77
这个函数可能会因为计算结果超出long类型的范围而出现溢出的问题。为了解决这个问题,我们可以使用C语言中的unsigned long long类型来进行计算。修改后的代码如下:
```
#include <stdio.h>
unsigned long long Jiecheng(int i) {
if (i == 1)
return 1;
else
return (unsigned long long)i * Jiecheng(i - 1);
}
int main() {
int n = 20;
printf("%llu\n", Jiecheng(n));
return 0;
}
```
在这个例子中,我们使用unsigned long long类型来代替long类型,这样可以扩大计算结果的范围。同时,在递归调用函数时,我们需要将i强制转换为unsigned long long类型,这样可以让计算结果正确。
相关问题
long Jiecheng(int i) { if(i == 1) return 1; else return i * Jiecheng(i-1); }解决这个溢出的问题
这个函数可能会因为计算结果超出long类型的范围而出现溢出的问题。为了解决这个问题,我们可以使用Java中的BigInteger类来进行计算。修改后的代码如下:
```
import java.math.BigInteger;
public class Main {
public static BigInteger Jiecheng(int i) {
if (i == 1)
return BigInteger.ONE;
else
return BigInteger.valueOf(i).multiply(Jiecheng(i - 1));
}
public static void main(String[] args) {
int n = 100;
System.out.println(Jiecheng(n));
}
}
```
在这个例子中,我们使用BigInteger.ONE来代替1,使用BigInteger.valueOf(i)来代替i,使用multiply方法来代替乘法操作。这样可以避免因为计算结果超出long类型的范围而导致的溢出问题。
编译代码#include<iostream> //计算问题2平均多少个主站可接受每支分队至少一个副站的气象报文 #include<cmath> using namespace std; int jiecheng(int m); long long C_zuhe(int m,int n); int jiecheng(int m) //求m的阶乘 { int output=1; if(m > 0) { for(int i =1; i<=m;i++) { output *= i; } else; return output; } long long C_zuhe(int m,int n) //求组合Cmn的值 { long long output =1; if(n < m -n){n = m -n;} if(m >= n) { for(int i =1; i<=m;i++) { output *=i; { for(int i =1; i<=m;i++) { output /=i; } } return output; } int main(){ int N =18; //主站数量 double P=0.8; //每个主站接受到每支分站至少一个副站的概率0.66,0.6925 double Result = 0.0; for (int i = 0; i <= N;i++) { Result = Result +C_zuhe(N,i)*pow(P,i)*pow(1-P,N-i)*i; } cout << Result << endl; return O; }
这段代码存在一些语法错误,需要进行修改。错误如下:
1. 第6行缺少右括号。
2. 第9行中的 else; 应该改为 else。
3. 第23行中的两个 for 循环重复了,应该改为一个 for 循环,其中包含两个语句块。
4. 第25行缺少右括号。
5. 第32行中的 i++ 后面多了一个右括号。
6. 第33行中的 i 应该改为 N-i。
修改后的代码如下:
```
#include<iostream>
#include<cmath>
using namespace std;
int jiecheng(int m)
{
int output=1;
if(m > 0)
{
for(int i =1; i<=m;i++)
{
output *= i;
}
}
else
{
return output;
}
}
long long C_zuhe(int m,int n)
{
long long output =1;
if(n < m -n)
{
n = m -n;
}
if(m >= n)
{
for(int i =1; i<=m;i++)
{
output *=i;
}
for(int i =1; i<=n;i++)
{
output /=i;
}
}
return output;
}
int main()
{
int N =18;
double P=0.8;
double Result = 0.0;
for (int i = 0; i <= N; i++)
{
Result = Result +C_zuhe(N,i)*pow(P,i)*pow(1-P,N-i)*i;
}
cout << Result << endl;
return 0;
}
```
这段代码的功能是计算问题2的答案,即平均多少个主站可接受每支分队至少一个副站的气象报文。其中,函数 jiecheng 用于求阶乘,函数 C_zuhe 用于求组合数,主函数中的 for 循环用于计算平均值并输出结果。
阅读全文