首先这不是题解 qwq,是与题意无关的输出机制解释。(狗头保命)
某种原因机缘巧合地碰到了这题,感觉很奇怪,所以查了点资料。
本题所说的 C++ cout 输出默认精度,是一种最小宽度输出,大部分情况下不等同于保留有效数字。以下两种方法是相同的:
double f = xxx;
cout << f << endl;
以及
double f = xxx;
printf("%g\n", f);
何为最小宽度输出?
这种输出结合了两种输出方式(以下给出)的优点,选择两种输出方式中占用宽度最小的输出。
第一种是小数输出,不过和 %lf 的效果有点区别,即直接按照一般的小数表示方法输出。一般来说保留六位有效数字,但要注意会截去末尾没有影响的若干个 0。比如 3.41240 尽管已经是六位有效数字,但按照这种方法会输出 3.4124。
第二种是指数输出,和 %e 的效果相近,用1.4e5 这样的形式表示 1.4×105,这样。
综上,cout 默认输出浮点数,以及 printf("%g", f) 的方式不可与“保留几位有效数字”划等号。如果不加说明,很有可能出现不合标准的错误。
希望所有有浮点数输出的题目做到以下两点之一:
1)题目明确规定保留小数位数(而不是有效数字),这时选手可以用 cout 或 printf 的格式化输出功能;
2)题目使用 special judge 判断答案准确性。这时选手应注意使用 printf("%lf\n", f) 进行输出,而非使用 cout << f << endl 这样的形式。
最后再说一句,这不是题解。