社区讨论

关于本题原理

P2394yyy loves Chemistry I参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mlqo3num
此快照首次捕获于
2026/02/17 21:57
前天
此快照最后确认于
2026/02/18 21:24
18 小时前
查看原帖
见这份代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	long double s;
	scanf("%Lf",&s);
	long double ss=s/23; 
	cout<<fixed<<setprecision(8)<<ss;
}
#7,#8 两个测试点 WA。
看了眼题解区,都说是 long double 精度不够,要用 scanf 强制提高精度。于是有了第 22 版代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	long double s;
	scanf("%18Lf",&s);
	long double ss=s/23; 
	cout<<fixed<<setprecision(8)<<ss;
}
这样就 AC 了。可是本蒟蒻又有疑问,为什么 %18Lf 就能过,别的数可以吗?详见下面这份代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	long double s;
	scanf("%30Lf",&s);
	long double ss=s/23; 
	cout<<fixed<<setprecision(8)<<ss;
}
#7、#8 又 WA 了,这让本人一头雾水,在这里想请教下懂行的大佬:
  1. %num(一个数字)Lf 有什么用,为什么题解区说可以“提高精度”?
  2. 如果上面那条属实,那么 %30Lf 按理说精度更高,为什么又不行了呢?
  3. 本题究竟在考什么,有哪些浮点数方面的盲区需要注意?
最后感谢各位的回复!

回复

3 条回复,欢迎继续交流。

正在加载回复...