紧急求助:根据e=1⼀1!+1⼀2!+,,,,+1⼀n!用C++设计一个编程来计算e精确到小数点后10万位!

2024-12-21 14:58:58
推荐回答(2个)
回答1:

#ifndef UINT
typedef unsigned int UINT;
#endif

#include
#include

#define N 100000

int GetLength(int m) {
int n=1;
double x=2.0/2.72;
while(m) {
while(x<1.0) {
x*=(double)(++n+1);
}

while(x>=1.0 && m) {
x/=10.0;
--m;
}
}

while(x<1.0) {
x*=(double)(++n+1);
}
return n;
}

int main(int argc, char* argv[]) {
const UINT base=1000000;
int i,k,m,n = N;
m=GetLength(n);
UINT *r=new UINT[m+1];
assert(r!=NULL);
for(i=0;i<=m;++i)
r[i]=1;
printf("e=2.\n");
for(k=n;k>0;k-=6) {
UINT y=0;
for(i=m;i>=2;--i) {
y=y+r[i]*base;
r[i]=y%i;
y/=i;
} if(k<6) {
char str[128];
sprintf(str,"%06d",y%base);
str[k]='\0';
printf("%s\n",str);
} else {
if(y printf("%06d",y);
else {
printf("XXXXXX\t");
if(r)
delete[]r;
return 1;
}
}
}
if(r)
delete[]r;
return 0;
}

输出控制你自己加吧,我这里就直接全部连续输出了,在控制台里,其实100换行控制不一定可行,因为cmd会自动换行的。

这个问题不能用一般的解法,参考下面的文章

回答2:

乱写