励志用更少的代码做高效的表达
题意:
计算π/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;
}