// evalue.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include#include #include //通过泰勒公式的变形:e = 1 + (1/1!) + (1/2!) + (1/3!) + … + (1/n!) 来求e的值 //#define M 1024 //e=2.718281828459 char* e(unsigned int M, char *estring); int main() { unsigned int i; char * estring; for (i =200004; i < 200005; i++) { estring = new char[i+1]; e(i,estring); printf("按任意键继续显示数据ne="); printf("%d", estring[0]); printf("."); for (unsigned int j = 1; j < i; j++) { if (estring[j] == 13) break; printf("%d", estring[j]); if (j % 1836 == 0) _getch(); } printf("n"); delete estring; } return 0; } //通过泰勒公式的变形:e = 1 + (1/n!)+ … +(1/3!) + (1/2!) + (1/1!) 来求e的值 char *e(unsigned int M,char *estring) { unsigned long k = 0, i = 0, j = 0, sum = 0, E,F,G,H,tmp,n,m; unsigned long *yushu; unsigned int elength; clock_t startTime, endTime; startTime = clock();//计时开始 if (M > 429496720) M = 429496720; n = (unsigned long)log10((long double)M); if (n > 3) { n = 10 - n; if (n > 5) n = 5;//以防超界 } else { if(n==0) n = 1; } elength = M / n; E = 1; for (i = 0; i < n-1; i++) E = E * 10; F = 10 * E; H = E; yushu = new unsigned long[M + 1]; for (k = 0; k <= M; k++) yushu[k] = E; k = 0; printf("e 值正在计算,一共要计算 %lu次,数据长度%lun", elength,n*elength); for (i = 1; i <= elength; i++) { if (i % 1000 == 0) printf("已经计算 %lu 次,完成%%%.1fn",i, (long double)i / (long double)elength * 100); for (j = M, sum = 0; j > 0; j--) { sum += yushu[j] * F;// yushu[j] = sum % (j); sum /= (j); } tmp = E + sum / F; G = H; for (m = 0; m < n; m++) { estring[k++] = tmp / G; tmp = tmp % G; G = G / 10; } E = sum % F; } estring[k] = 13;//终止符标志 printf("n数据长度 %lun", n*(i-1)); delete yushu; endTime = clock();//计时结束 printf("计算时间: %.1f 秒",(double)(endTime - startTime) / CLOCKS_PER_SEC); return estring; }



