7-1 求e的近似值(15 分)
阿新 • • 發佈:2019-02-11
一、題目
二、個人理解
此題主要的關鍵點在於如何不執行超時。
我們可以發現題目要求保留小數點後八位,於是我們測試資料發現當n>11時,保留8位的資料就不變了,於是我們可以大膽捨棄以後位數的計算。
對於此類題目,我們要仔細讀題目,發現它讓我們保留到多少位,然後進行測試,不要盲目的去改變演算法。
C語言:
#include <stdio.h>
int factorial(int n)
{
int factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
return factorial;
}
int main()
{
int n;
double sum = 1.0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
sum += 1.0 / factorial(i);
if (i == 11) { //當n>=11時對於保留8位來說已經不變
break;
}
}
//printf("%.9f\n", 1.0 / factorial(12) ); 結果為0.000000002
printf("%.8f\n" , sum);
return 0;
}