勵志用更少的代碼做高效的表達
題意:
計算π/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;
}