#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
else {
printf("XXXXXX\t");
if(r)
delete[]r;
return 1;
}
}
}
if(r)
delete[]r;
return 0;
}
输出控制你自己加吧,我这里就直接全部连续输出了,在控制台里,其实100换行控制不一定可行,因为cmd会自动换行的。
这个问题不能用一般的解法,参考下面的文章
乱写