日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

c語言之如何求e的近似值_C 語言

作者:inooll ? 更新時間: 2023-01-01 編程語言

如何求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;
}

結果:

總結

原文鏈接:https://blog.csdn.net/inooll/article/details/104886900

欄目分類
最近更新