#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;
}
То, что у меня есть выше, это код, который у меня есть до сих пор.
сумма и остальные намеренно оставлены незавершенными, потому что они все еще находятся на этапе строительства.
Теперь мне нужно расширить число Эйлера,
Это должно заставить вас использовать ряды типа x [n], чтобы разделить результат на несколько частей и использовать функции для вычисления результатов и тому подобное.
Согласно этому,
Мне нужно найти конкретную часть Расширения Маклаурина и вычислить ее.
Так что X в е = 1 + х + (1/2!) * Х и т. Д. Всегда 1
Дайте нам e = 1 + 1 + 1/2! +1/3! + 1 / n! рассчитать
Программа должна рассчитать его в порядке N
так что если N равно 1, он вычислит только соответствующую часть факторного деления;
Это означает, что одна часть переменной будет содержать результат вычисления, который будет x = 1.00000000 ~, а другая часть будет содержать действительную сумму до сих пор, которая равна e = 2.000000 ~
для N = 2
х = 1/2 !, е = предыдущая е + х
для N = 3
х = 1/3 !, е = предыдущая е + х
Максимальное количество N равно 29
каждый раз, когда вычисляется результат, ему нужно хранить все числа после точки в отдельных переменных, таких как x[1] x[2] x[3]
, пока все 30–35 цифр точности не будут заполнены ими.
поэтому при распечатке, в случае N = 2
х [0] .x [1] х [2] х [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, хотя значение [3] превышает предел целого числа, любой способ исправить это?
Я не могу использовать двойные или большие буквы для этого, поэтому, если у кого-то есть обходной путь, это будет оценено.