c++ - 类型转换问题
问题描述
我有一个关于在解决问题时遇到的类型转换错误的问题(底部的链接)。我的 AC 提交和我的 WA 提交之间的唯一区别是,在第一次提交中,我将类型转换为双精度而不是浮点数。我非常感谢任何关于为什么 float 会出错的澄清。谢谢你。
西澳提交:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
long long int a,b,c,d;
cin>>a>>b>>c>>d;
if(a<=b)
cout<<b<<endl;
else
{
if(d>=c)
cout<<-1<<endl;
else
{
long long int val = c - d;
long long int f = ceil((a-b)/((float)val));
cout<<(b + (c * f))<<endl;
}
}
}
return 0;
}
交流提交
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
long long int a,b,c,d;
cin>>a>>b>>c>>d;
if(a<=b)
cout<<b<<endl;
else
{
if(d>=c)
cout<<-1<<endl;
else
{
long long int val = c - d;
long long int f = ceil((a-b)/((double)val));
cout<<(b + (c * f))<<endl;
}
}
}
return 0;
}
解决方案
您需要了解,如果最终数字重复出现或小数部分很长(例如 1.000000000078),则涉及十进制数的计算会导致一些错误。由于 double 的精度是 2 倍,因此它能够处理这些错误(主要是舍入错误)。尝试在这些竞赛问题中使用 long double。
此外,这可能会有所帮助。
推荐阅读
- c# - 如何在c#中检查指定的正则表达式
- mysql - mysql:如何从两个表中进行选择
- python - Pytest - 测试解析器错误:无法识别的参数
- ios - 在 iOS 中构建警报应用程序
- css - Chrome 将 1px 计算为 6px,弄乱了使用 rem 的样式
- jquery - 在单独的 div 中以可视方式向用户显示选定的复选框
- php - 页脚脚本在 codeigniter 中不起作用
- javascript - 我们可以从一个无状态组件传递多个道具并将其作为另一个无状态组件中的单个参数获取吗?
- java - Spring Boot 在部署为传统战争时尝试运行嵌入式 Tomcat
- php - Laravel 传递可选变量来查看