自然常数,符号e,为数学中一个常数,是一个无限不循环小数,且为超越数,其值约为2.718281828459045。它是自然对数函数的底数。有时称它为欧拉数(Euler number),以瑞士数学家欧拉命名;也有个较鲜见的名字纳皮尔常数,以纪念苏格兰数学家约翰·纳皮尔(John Napier)引进对数。它就像圆周率π和虚数单位i,是数学中最重要的常数之一。
摘自秒懂百科
计算方式一:
e=1/0!+1/1!+1/2!+1/i-1!;
代码实现
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll jc(ll n){//阶乘!,弊端是不用高精度仍然超市
ll i,x=1;
for(i=1;i<=n;i++){
x*=i;
}
return x;
}
main() {
double ans=0.0;
ll n,i,j,k,x;
cout<<"位数:";
cin>>x;
cout<<"精度:";
cin>>n;
//cout<<jc(n);
for(i=0;i<=n;i++){//循环计算
ans+=1.0/jc(i)*1.0;
} cout<<setprecision(x)<<fixed<<ans;//设置小数位数
}
计算方法二
e=(1+1/n)^n
代码实现
#include<bits/stdc++.h>
#define ll long long
using namespace std;
main() {
double ans=1.0;
ll n,i,j,k,x;
cout<<"位数:";
cin>>x;
cout<<"精度:";
cin>>n;
//cout<<jc(n);
double t=1+1.0/n*1.0;
for(i=1;i<=n;i++){//循环幂
ans*=t;
}
cout<<setprecision(x)<<fixed<<ans;
}
总结两种算法
算法1 | 算法2 | |
复杂度 | O(n^2) | O(n) |
数据程度 | 有阶乘,容易爆long long | 一般情况下很大不会爆(<2^63) |
结果精度 | n较小也可以得到较为精确的值 | n要很大才能得到精确值 |