[OC]C++计算e(自然常数)

自然常数,符号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要很大才能得到精确值

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值