首页 > 解决方案 > 类型转换问题

问题描述

我有一个关于在解决问题时遇到的类型转换错误的问题(底部的链接)。我的 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;
}

问题

标签: c++type-conversion

解决方案


您需要了解,如果最终数字重复出现或小数部分很长(例如 1.000000000078),则涉及十进制数的计算会导致一些错误。由于 double 的精度是 2 倍,因此它能够处理这些错误(主要是舍入错误)。尝试在这些竞赛问题中使用 long double。

此外,可能会有所帮助。


推荐阅读