C++牛客题解:牛牛的快递(小数点的处理)

目录

题目

解析

处理方法1

处理方法2

代码


题目

C++牛客题解:牛牛的快递(小数点的处理)_第1张图片

解析

对于是否加急的5元来说,只需要简单的用if语句判断字符b是'y' or 'n'即可

1kg20元,2kg21元,所以最后结果为ret = 20 + kg数 - 1

不足1kg的部分按1kg算,所以我们需要把小数向上取整来处理

处理方法1

float tmp = a - (int)a;

因为我们将一个浮点数强行转为int类型的整数时,它必定会去除小数部分 

我们可以定义一个tmp来存储a - (int)a,它的区间必定是[0-1)之间

若tmp为0,则说明a是一个整数,否则说明a为一个小数

对于我们的题目来说,若是判断出了a为小数,则ret = 20 + ((int)a+1) - 1

若是为整数,则ret = 20 + (int)a - 1

处理方法2

我们可以使用C++库函数ceil

C++牛客题解:牛牛的快递(小数点的处理)_第2张图片

它可以将传进去的double参数向上取整通过返回值返回给我们,这样就很好处理该题了 

代码

#include 
#include 
using namespace std;

int main() 
{
    float a;
    char b;
    cin >> a >> b;

    int ret = 20;
    if (a > 1)
    {
        ret += ceil(a) - 1; //  向上取整函数
    }

    // float tmp = a - (int)a;
    // if (tmp > 0)
    // {
    //     ret += ((int)a + 1) - 1;
    // }
    // else
    // {
    //     ret += (int)a - 1;
    // }

    if (b == 'y') ret += 5;

    cout << ret;

    return 0;
}

你可能感兴趣的:(c++,算法,开发语言)