利用泰勒展開 e = 1 + 1/1! + 1/2! + 1/3! + ...,直到 1/n! < 10^-7 停止,輸出 e 的近似值。
#include
int factorial(int n) {
int res = 1;
for (; n > 0; n--) res *= n;
return res;
}
int main() {
double e = 1.0;
for (int n = 1; 1.0 / factorial(n) >= 1e-7; n++)
e += 1.0 / factorial(n);
printf("%lf\n", e);
return 0;
}
缺點:每項重新計算階乘,時間複雜度 O(n²)。
#include
int main() {
double e = 1.0;
double fact = 1.0; // 0! = 1
for (int n = 1; 1.0 / fact >= 1e-7; n++) {
fact *= n; // n! = (n-1)! * n
e += 1.0 / fact;
}
printf("e = %lf\n", e);
return 0;
}
e = 2.718282
n! = n * (n-1)! 將複雜度從 O(n²) 降至 O(n)。1/n! < 1e-7 等價於 n! > 1e7,約 n=10 時滿足。double 足夠精度;若需更高精度可用 long double 或高精度庫。