11行代碼AC——比紫書優化,例題2-3 近似計算——解題報告

勵志用更少的代碼做高效的表達


題意:

計算π/4 = 1 - 1/3 + 1/5 - 1/7 + …,直到最後一項小於10^-6。

思路分析:

本題很簡單,因此計算重心從解題轉化爲優化。
本題爲重複計算,但只有算完一項後,才知道它是否小於10^-6,也就是說,循環終止判斷是在計算之後,而不是計算之前,因此最佳解法顯然是使用do-while循環,但紫書中並未給出該種解法,因此筆者寫了這篇博文以供參考

代碼:

#include<cstdio>
int main() {
	double num = 1, n = 1;
	bool flag = false;
	do {
		flag ? (num += 1/(n*2+1)) : (num -= 1/(n*2+1)) ;
		flag = !flag; 
	}while((1/((n++)*2+1)) >= 1e-6);
	printf("%.6f", num);
	return 0;
}

擇苦而安,擇做而樂,虛擬現實終究比不上真實精彩之萬一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章