题目:
对一个非负整数n来说,它的阶乘可以写成 n! (读作“n的阶乘”),其计算公式定义如下:
n! = n x (n-1) x (n-2)x......x1(对于大于1的 n )
和
n! = 1 ( 对于等于0或者等于1的n )
例如,5!=5 x 4 x 3 x 2 x 1,结果是120.下面用while语句完成:
a)编写一个程序,要求读入一个非负整数,然后计算和打印它的阶乘;
b)编写一个程序,使用如下公式:
e=1+1/1!+1/2!+……+1/(n−1)!
c)编写一个程序,使用如下的公式估算e^x的值:
e=1+x/1!+(x^2)/(2!)+……+( x^(n-1) )/( (n−1)! )
程序如下:
a)编写一个程序,要求读入一个非负整数,然后计算和打印它的阶乘;
//4.34a.cpp
#include <iostream>
using namespace std;
int main()
{
unsigned int num;
cout << "请输入一个非负整数:";
cin >> num;
double jiecheng = 1; // 存放阶乘的变量
if (num == 0 || num == 1)
{
jiecheng = 1;
}
else
{
while (num != 0)
{
jiecheng *= num;
num--;
}
}
cout << " 它的阶乘是 " << jiecheng << endl;
return 0;
}
运行截图:
b)编写一个程序,使用如下公式:
e=1+1/1!+1/2!+……+1/(n−1)!
//4.34b.cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int i = 0, sumNumber, num;
double e = 1;
cout << "e得精度是:";
cin >> sumNumber; // 累加求和的项数,也是精度
if (sumNumber > 1) // 控制当精度为1时,e=1
{
i = 1;
}
while (i < sumNumber)
{
num = i; // 用于计算阶乘的数
double jiecheng = 1; // 存放阶乘的变量
if (i == 0)
{
jiecheng = 1; // 此时e=1
break;
}
else
{
while (num != 0)
{
jiecheng *= num;
num--;
}
}
e += (1 / jiecheng);
cout << setprecision(6) << fixed;
i++; // 控制循环
}
cout << " e = " << e << endl;
return 0;
}
运行截图:(精度为1和2为特殊情况)
注意:标准e=2.718281828459045
c)编写一个程序,使用如下的公式估算e^x的值:
e^x=1+x/1!+(x^2)/(2!)+……+( x^(n-1) )/( (n−1)! )
//4.34c.cpp
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int i = 0, sumNumber, num;
double e = 1;
int x; // x表示的e的幂数
cout << "请输出e的幂数:";
cin >> x;
cout << "e^" << x << "次幂要求的精度是:";
cin >> sumNumber; // 累加求和的项数,也是精度
if (sumNumber > 1) // 控制当精度为1时,e=1
{
i = 1;
}
while (i < sumNumber)
{
num = i;
double jiecheng = 1; // 存放阶乘的变量
if (i == 0)
{
jiecheng = 1; // 此时e=1
break;
}
else
{
while (num != 0)
{
jiecheng *= num;
num--;
}
}
e += (pow(x, i) * (1 / jiecheng));
cout << setprecision(6) << fixed;
i++; // 控制循环
}
cout << "e = " << e << endl;
return 0;
}
运行截图:(满足特殊情况,精度为1)
注意:百度e²≈7.3891