自然常數 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的值,...