c語言之如何求e的近似值
如何求e的近似值
自然常數 e 可以用級數 1+1/1!+1/2!+⋯+1/n!+⋯ 來近似計算。本題要求對給定的非負整數 n,求該級數的前 n+1 項和。
輸入格式:
輸入第一行中給出非負整數 n(≤1000)。
輸出格式:
在一行中輸出部分和的值,保留小數點後八位。
輸入樣例:
10
輸出樣例:
2.71828180
我的答案
#include <stdio.h> int main() { int n; double sum = 1, temp = 1;//註意是n+1項,所以先令sum=1 scanf("%d", &n); for (int i = 1; i <= n; i++) { temp *= i; sum += 1.0 / temp; } printf("%.8lf",sum); return 0; }
求e的近似值(巧用保留位數,拒絕最大值溢出)
題目:
自然常數 e 可以用級數 1+1/1!+1/2!+⋯+1/n!+⋯ 來近似計算。本題要求對給定的非負整數 n,求出該級數的前 n+1 項和。
輸入格式:
輸入第一行中給出非負整數 n(≤1000)
輸出格式:
在一行中輸出部分和的值,保留小數點後八位
註意:
一開始,n按照輸入格式中給定的條件設置為≤1000,,,果然數據溢出瞭,用long long int也拯救不瞭的那種,結果如下:
然後想到用數組存下來,,更難瞭好嗎o(╥﹏╥)o!!!
突然,輸出格式中保留小數點後八位,一下子亮瞭,簡直是高光啊!以這個為參照,截取不就好瞭,具體見代碼部分。
事實上,當m<=0.00000001時,滿足條件的第一個m=0.0000000021,後面項的值更小,所以在此處截取對保留8位數的結果不會進行損耗。
代碼:
#include<stdio.h> int main(){ int num; long long int n=1; double m,sum=1; scanf("%d",&num); if(num>=0&&num<=1000){ for(int i=1;i<=num;i++){ n*=i; //n表示n! m=1.0/n; sum+=m; if(m<=0.00000001){ //當某一項的值小於八位小數時,跳出循環 break; } } printf("%.08lf",sum); } return 0; }
結果:
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。