华为上机真题 2022取近似值

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2022取近似值相关的知识,希望对你有一定的参考价值。


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

二、测试样例

三、解题思路

3.1 方法一

3.2 方法二

四、代码实现

4.1 方法一

4.2 方法二 

五、时间复杂度


注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!

一、题目描述

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 5, 向上取整;小于 5,则向下取整。

1.1 输入描述

输入一个正浮点数值

1.2 输出描述

输出该数值的近似整数值

二、测试样例

输入

5.5

输出

6

三、解题思路

本题可以通过两种方法求解。

3.1 方法一

通过字符串处理正浮点数,判断第一位小数是否大于等于 5,如果是则模拟将整数部分的字符串加 1,否则,输出整数部分的字符串。

3.2 方法二

将输入值乘以 10,取整后取余数,此时,余数为第一位小数,然后,判断余数是否大于等于 5,如果是则将输入值加 1。最后将输入值取整输出。

四、代码实现

4.1 方法一

通过字符串处理输入值,代码如下所示。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

//将字符串里存储的整数加 1
string strAddOne(string str)

    string ans;
    bool flag = true;
    for (int i = str.size() - 1; i >= 0; --i) 
        if (!flag) 
            str = str.substr(0, i + 1);
            reverse(str.begin(), str.end());
            ans += str;
            break;
        

        if (str[i] == '9')  // 如果是 9,则进一
            ans += '0';
         else 
            flag = false;
            ans += (str[i] + 1);
        
    
    if (flag)  // 注意最后还有进位的情况
        ans += '1';
    
    reverse(ans.begin(), ans.end());
    return ans;

string slove(string str)

    bool flag = false;
    int idx = str.find('.'); //判断是否可以进位
    if (idx + 1 < (int)str.size() && str[idx + 1] >= '5') 
        flag = true;
    

    str = str.substr(0, idx);
    return flag ? strAddOne(str) : str;


int main()

    string str;
    while (cin>>str) 
        if (str.find('.') == string::npos)  // 判断是否存在小数部分
            cout<<str<<endl;
         else 
            cout<<slove(str)<<endl;
        
    
    return 0;

4.2 方法二 

通过取余判断第一位小数,代码如下所示。

#include <iostream>
#include <string>
using namespace std;

int main()

    double ans;
    while(cin>>ans) 
        int rem = (int)(ans * 10) % 10; // 取得小数点后第一个小数的值
        if (rem >= 5)  // 判断小数的值
            ans += 1;
        
        cout<<(int)ans<<endl; // 取整
    
    return 0;

五、时间复杂度

方法一的时间复杂度为 O(1),方法二的时间复杂度为 O(n),其中,n 为字符串的长度。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


以上是关于华为上机真题 2022取近似值的主要内容,如果未能解决你的问题,请参考以下文章

华为上机真题 2022数组组成的最小数字

华为上机真题 2022流水线

华为上机真题 2022太阳能板的最大面积

华为上机真题 2022路灯照明

华为上机真题 2022猴子爬山

华为上机真题 2022找到它