C++编程 下列级数计算e的近似值,是e有小数点后1000位有效数字。 这道题的思路和原理是,每个步骤的意思
#include<iostream>usingnamespacestd;intmain(){intN=1000;inta[1000];//定义一个数组ints=1;for...
#include<iostream>
using namespace std;
int main()
{ int N=1000;
int a[1000]; //定义一个数组
int s=1;
for(int n=N;n>=1;n--)
{ int r=s%n;
s=s/n+1;
for(int i=0;i<N;i++)
{ r=r*10+a[i];
a[i]=r/n;
r%=n;
}
for(i=N-1;i>0;i--)
{a[i-1]+=a[i]/10;
a[i]%=10;
}
s+=a[0]/10;
a[0]%=10;}
cout<<s<<".";
for(int i=0;i<N;i++)
{cout<<a[i];}
cout<<endl;
return 0;
} 展开
using namespace std;
int main()
{ int N=1000;
int a[1000]; //定义一个数组
int s=1;
for(int n=N;n>=1;n--)
{ int r=s%n;
s=s/n+1;
for(int i=0;i<N;i++)
{ r=r*10+a[i];
a[i]=r/n;
r%=n;
}
for(i=N-1;i>0;i--)
{a[i-1]+=a[i]/10;
a[i]%=10;
}
s+=a[0]/10;
a[0]%=10;}
cout<<s<<".";
for(int i=0;i<N;i++)
{cout<<a[i];}
cout<<endl;
return 0;
} 展开
1个回答
展开全部
源代码排版下:
#include<iostream>
using namespace std;
int main() {
int N = 3;
int a[ 1000 ] = { 0 }; //定义一个数组
int s = 1;
for ( int n = N; n >= 1; n-- )
{
int r = s%n;
s = s / n + 1;
int i = 0;
for ( ; i<N; i++ )
{
r = r * 10 + a[ i ];
a[ i ] = r / n;
r %= n;
}
for ( i = N - 1; i>0; i-- )
{
a[ i - 1 ] += a[ i ] / 10;
a[ i ] %= 10;
}
s += a[ 0 ] / 10;
a[ 0 ] %= 10;
}
cout << s << ".";
for ( int i = 0; i < N; i++ )
{
cout << a[ i ];
}
cout << endl;
system( "pause" );
return 0;
}
这个算法是用来计算自然对数e的近似值,结果存在一个内存数组里。数学思想是基于欧拉1748年把牛顿的二项式定理改进的一个公式(3)
这个公式使得欧拉把e精确到23位小数点。受欧拉公式的启发,衍生出来很多变种。其中的一个变种是
本算法就是对(4)公式的翻译。第一个外循环是累乘计算(4)式的每一个括号项。当k足够大的时候,式子的...≈0,所以可以初始化为s=1.第一个内循环是计算(1+r)/k,把每一位小数存入相应的数组位置里。由于每一次内循环都会往各个小数位上加上一定的商,所以会超过10,于是要把他放到前一位里面,这便是第二位做的事情。
我想对着公式看代码便容易很多,也就没必要我写出每一步代码具体的意思了。
还有很多计算e的高效算法,请参见参考资料。
参考资料:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询