# include & ltiostream & gt
使用?命名空間?std
int?main()?{
int?n?=?3;
int?壹個[?1000?]?=?{?0?};?//定義壹個數組
int?s?=?1;
為了什麽?(?int?n?=?n;?n?& gt=?1;?n -?)
{
int?r?=?s % n;
s?=?s?/?n?+?1;
int?我?=?0;
為了什麽?(?;?我& ltn;?i++?)
{
r?=?r?*?10?+?壹個[?我?];
壹個[?我?]?=?r?/?n;
r?%=?n;
}
為了什麽?(?我?=?n?-?1;?我& gt0;?我-?)
{
壹個[?我?-?1?]?+=?壹個[?我?]?/?10;
壹個[?我?]?%=?10;
}
s?+=?壹個[?0?]?/?10;
壹個[?0?]?%=?10;
}
cout?& lt& lt?s?& lt& lt?".";
為了什麽?(?int?我?=?0;?我?& lt?n;?i++?)
{
cout?& lt& lt?壹個[?我?];
}
cout?& lt& lt?endl
系統(?“暫停”?);
回歸?0;
} ?這個算法用於計算自然對數e的近似值,結果存儲在壹個內存數組中。數學思想是基於歐拉1748的公式(3),改進了牛頓二項式定理。
這個公式使得歐拉能夠將E精確到小數點後23位。受歐拉公式啟發,衍生出許多變種。其中壹個變體是
該算法是公式(4)的翻譯。第壹個外部循環是將等式(4)中的每個括號項相乘。當k足夠大時,公式≈0,所以可以初始化為s=1。第壹個內循環是計算(1+r)/k,將每個小數存儲在對應的數組位置。因為每個內循環每個小數位都會加壹定的商,會超過10,所以會放在前壹個裏,第二個就是這麽做的。
我覺得看公式前面的代碼要容易得多,我沒必要把代碼每壹步的具體意思都寫出來。
有很多計算e的高效算法,請看參考資料。
參考資料:
putation.free.fr/Constants/E/e.html#eSeries
putation . free . fr/Constants/tiny programs/tiny codes . html # tth _ sec 2
/questions/3028282/壹種高效的計算數學常數的方法
/questions/33015/why-my-c-program-for-calculation-eulers-constant-of-poor-quality/33019 # 33019