c語言之如何求e的近似值
如何求e的近似值
自然常數(shù) e 可以用級數(shù) 1+1/1!+1/2!+?+1/n!+? 來近似計算。本題要求對給定的非負整數(shù) n,求該級數(shù)的前 n+1 項和。
輸入格式:
輸入第一行中給出非負整數(shù) n(≤1000)。
輸出格式:
在一行中輸出部分和的值,保留小數(shù)點后八位。
輸入樣例:
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的近似值(巧用保留位數(shù),拒絕最大值溢出)
題目:
自然常數(shù) e 可以用級數(shù) 1+1/1!+1/2!+?+1/n!+? 來近似計算。本題要求對給定的非負整數(shù) n,求出該級數(shù)的前 n+1 項和。
輸入格式:
輸入第一行中給出非負整數(shù) n(≤1000)
輸出格式:
在一行中輸出部分和的值,保留小數(shù)點后八位
注意:
一開始,n按照輸入格式中給定的條件設(shè)置為≤1000,,,果然數(shù)據(jù)溢出了,用long long int也拯救不了的那種,結(jié)果如下:

然后想到用數(shù)組存下來,,更難了好嗎o(╥﹏╥)o!??!
突然,輸出格式中保留小數(shù)點后八位,一下子亮了,簡直是高光??!以這個為參照,截取不就好了,具體見代碼部分。
事實上,當(dāng)m<=0.00000001時,滿足條件的第一個m=0.0000000021,后面項的值更小,所以在此處截取對保留8位數(shù)的結(jié)果不會進行損耗。
代碼:
#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){ //當(dāng)某一項的值小于八位小數(shù)時,跳出循環(huán)
break;
}
}
printf("%.08lf",sum);
}
return 0;
}結(jié)果:



總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux網(wǎng)絡(luò)編程之基于UDP實現(xiàn)可靠的文件傳輸示例
這篇文章主要介紹了Linux網(wǎng)絡(luò)編程之基于UDP實現(xiàn)可靠的文件傳輸示例,是很實用的技巧,需要的朋友可以參考下2014-08-08
C語言數(shù)據(jù)結(jié)構(gòu)之 折半查找實例詳解
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之 折半查找實例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
Qt實現(xiàn)數(shù)據(jù)導(dǎo)出到xls的示例代碼
導(dǎo)入導(dǎo)出數(shù)據(jù)到csv由于語法簡單,適用場景有限,于是本文將為大家介紹Qt如何實現(xiàn)導(dǎo)出數(shù)據(jù)到xls,感興趣的小伙伴可以跟隨小編一起試一試2022-01-01

