社区讨论
警示后人(sqrt的精度问题)
B3957[GESP202403 三级] 完全平方数参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mlxrc9au
- 此快照首次捕获于
- 2026/02/22 21:02 2 周前
- 此快照最后确认于
- 2026/02/24 21:25 2 周前
这道题的判断语句不能写成
cpp if(sqrt(a[i]+a[j])*sqrt(a[i]+a[j])==a[i]+a[j])cnt++;这样的形式,因为sqrt()函数返回值是cpp double
类型,而cpp double类型进行计算时很容易产生误差,导致返回值的小数部分干扰计算,因此需要写成cpp int temp=sqrt(a[i]+a[j]); if(temp*temp==a[i]+a[j])cnt++;这样的形式,给sqrt()的返回值截断一下小数部分,这样非完全平方数就无法计算得到原数,完全平方数不会被小数部分干扰,可以通过平方计算得到原数,从而正确AC回复
共 1 条回复,欢迎继续交流。
正在加载回复...