C語言 求e的近似值(用到高精度乘法)

2021-10-08 22:45:10 字數 2219 閱讀 9998

自然常數 e 可以用級數 1+1/1!+1/2!+⋯+1/n!+⋯ 來近似計算。本題要求對給定的非負整數 n,求該級數的前 n+1 項和。

輸入格式:

輸入第一行中給出非負整數 n(≤1000)。

輸出格式:

在一行中輸出部分和的值,保留小數點後八位。

輸入樣例:

10輸出樣例:

2.71828180

這道題要求計算1000的factorial,不管用int還是long都會溢位。因此採用高精度乘法。

(我是參考別人的**的,就當是做筆記了)

以下**參考博文:

?1:高精度乘法(輸入為字串,輸出為整數陣列)

#include

#include

intmultiply

(char number1,

char number2)

;int

main()

intmultiply

(char number1,

char number2)

for(i =

0, j = m -

1; i < m; i++

, j--

)int c[

3000];

/*引入用來儲存結果的整型陣列c*/

for(i =

0; i <

3000

; i++

)/*下面這一段就體現了逆序存放的作用*/

for(i =

0; i < n; i++)}

for(i =

0; i < n + m; i++)}

for(j =

2999

; j >

0; j--

)for

(i = j; i >=

0; i--

)printf

("\n");

return

*c;}

其中這個multiply函式就可以計算多少位數字都可以,滿足科學計數的要求。

但實際上,它仍有一些缺陷。傳入引數必須為字元陣列,返回的是整數陣列的指標。

計算階乘需要用到迭代,輸入變數和輸出變數的格式需要統一。

因此另外一種僅僅採用陣列的方法可以參考:

這個是參考的博文

?2:高精度階乘(輸入為整數n,無輸出,執行時列印結果)

#include

#include

#define max 3000

/*設定有3000位的陣列時用到*/

void

multiply

(int n)

;int

main()

void

factorial

(int n)

;/*設定有3000位的陣列c*/

c[0]

=1;/*最後會逆序輸出,所以第一位初始化為1*/

for(

int i=

2;i<=n;i++)}

int len=max;

for(

int i=len-

1;i>=

0;i--

)/*將len作為下標移動到開始有元素的部分*/

for(

int i=len-

1;i>=

0;i--

)/*最後按逆序(實際的順序)輸出c*/

對於這道題,求e的近似值,只需要精確到小數點後8位,實際上不需要用到高精度演算法。

因此為了提高程式效率,只需要在n等於1000時能夠輸出而不報錯即可。

來看乙個?:

#include

intmain()

item=

1.0/item;

sum=sum+item;

/*sum為加上item的值*/

}printf

("%.8f"

, sum)

;return0;

}

這個的關鍵是要將階乘項item和求和項sum都設為雙精度,而不能用長整型。

c語言 求 的近似值

用公式 4 1 1 3 1 5 1 7.求 的近似值,直到發現某一項的絕對值小於10 6為止 該項不累加 解 程式 include include int main 結果 pi 3.14159065 請按任意鍵繼續.本程式輸出的結果是pi 3.14159065,雖然輸出了8位小數,但是只有前5位小數...

練習4 7 求e的近似值 (15 分)

自然常數e可以用級數1 1 1 1 2 1 n 來近似計算。本題要求對給定的非負整數n,求該級數的前n項和。輸入格式 輸入第一行中給出非負整數n 1000 輸出格式 在一行中輸出部分和的值,保留小數點後八位。輸入樣例 輸出樣例 2.71828180 ps 一開始factorial函式用的返回型別是i...

給定精度e求 1 x 的近似值和迭代次數

給定精度e,求 1 x x 1的近似值和迭代次數 問題描述 給定乙個精度e,用下列taylor公式計算 1 x a,x 1的近似值。1 x a 1 ax a a 1 x2 2 a a 1 a n 1 xn n x 1 其中 x 1,e為實數,a為實數。編寫程式根據使用者輸入的x x 1 a和e的值,...