#include <iostream>
#include <iomanip>
using namespace std;
int a[8], e[8];
void term (int n)
{
a[0]=1;
for (int i=0; i<8; i++)
{
if (i<7)
{
a[i+1]+=(a[i]%n)*100000;
}
/* else
{
a[i+1]+=((a[i]/640)%(n/640))*100000;
}
*/
a[i]=a[i]/(n);
}
}
void sum ()
{
}
int factorial(int x, int result = 1)
{
if (x == 1)
return result;
else return factorial(x - 1, x * result);
}
int main()
{
int n=1;
for (int i=1; i<=30; i++)
{
term(n);
cout << a[0] << " "<< a[1] << " " << a[2] << " "
<< a[3] << " " << a[4] << " " << a[5]<< " "
<< " " << a[6] << " " << a[7] << endl;
n++;
for (int j=1; j<8; j++)
a[j]=0;
}
return 0;
}
我上面的代码是我到目前为止的代码。Sum 和其余部分故意未完成,因为那仍处于构建阶段。
现在,我需要扩展欧拉数,这应该让你使用像 x[n] 这样的系列来将结果分成多个部分并使用函数来计算结果等。
根据它,我需要找到麦克劳林展开式的具体部分并计算它。
所以 e=1+x+(1/2!)*x 等中的 X 总是 1 给我们 e=1+1+1/2!+1/3!+1/n! 计算
程序应按 N 的顺序计算它
所以如果 N 为 1,它将只计算相应的阶乘除法部分;这意味着变量的一部分将保存计算结果,即 x=1.00000000~,而另一部分将保存到目前为止的实际总和,即 e=2.000000~
对于 N=2 x=1/2!,e=前一个 e+x
对于 N=3 x=1/3!, e=前一个 e+x
每次计算结果时N的最大个数为29,它需要将点后的所有数字保存到单独的变量中,x[1] x[2] x[3]
直到所有30~35位精度都被它们填充。所以打印出来的时候,在N=2的情况下
x[0].x[1]x[2]x[3]~ 应该以 0.50000000000000000000 的形式出现,其中 x[0] 应该保持点上方的值,并且x[1~3]
每个保持 5 位。
好吧,对不起,如果我的解释很糟糕,但这就是它的要求。所有数组都必须在 Int 中,我不能使用其他数组而且我不能使用 bigint,因为它违背了目的
我遇到的另一个问题是,在进行操作时,它一直运行到 7 日。从 8 号开始,以此类推,如果不给我负数,它就不会继续。
for N=8
它应该是 00002480158730158730158730。相反,我得到 00002 48015 -19220 -41904 30331 53015 -19220
这显然是由于 int 的限制,因为在那部分它执行 1936000000%40320 以获得a[3]
' 的值,然后是 35200,然后乘以 100000,得到 3520000000/40320,尽管 a[3] 的值超过整数的限制,有什么办法解决这个问题?我不能为此使用双打或 Bigint,因此如果有人对此有解决方法,将不胜感激。