e = sum((1/i!) i is from 0 to n
where n is allowed to go to infinity. This can actually yield very accurate approximations of e using relatively small values of n.
n e - ----------- 0 1 1 2 2 2.5 3 2.666666667 4 2.708333333
答案:
#include <stdio.h>
#include <stdlib.h>
#include <string>
void main()
{
int i, j, n, k;
double e;
int v, s = 0;
int decimal, sign;
char* buffer;
int precision = 11;
char out[12];
printf("n e/n");
printf("- -----------/n");
for (n = 0; n <= 9; ++n)
{
e = 0;
for (i = 0; i <= n; ++i)
{
if (i == 0)
v = 1;
else
v *= i;
e += (double) 1.0 / v;
}
buffer = _ecvt(e, precision, &decimal, &sign);
for (j = 10; j >= 0; --j)
{
if (buffer[j] != '0')
break;
}
if (j != 0)
{
int add = 0, v;
if (j == 10)
{
add = buffer[j]-'0'>=5?1:0;
j = j-1;
}
else
add = 0;
for (k = j, i = k+1; i >= 0; --i)
{
if (i == decimal)
out[i] = '.';
else
{
if (add != 0)
{
v = buffer[k--]-'0' + add;
out[i] = v%10 + '0';
add = v/10;
}
else
out[i] = buffer[k--];
}
}
out[j+2] = '/0';
}
else
{
out[0] = buffer[0];
out[1] = '/0';
}
printf("%d %s/n", n, out);
}
}