题解 | #取近似值#

取近似值

http://www.nowcoder.com/practice/3ab09737afb645cc82c35d56a5ce802a

取近似值

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

数据范围:保证输入的数字在 32 位浮点数范围内

输入描述:输入一个正浮点数值

输出描述:输出该数值的近似整数值

示例1:输入:5.5,输出:6

说明:0.5>=0.5,所以5.5需要向上取整为6

方法一:

思路分析: 本题要求为,当小数点后数值大于等于0.5,就向上取整,否则就向下取整。输入的要求为正浮点数值,因此设定为float,本题可以通过int只能表示整数,通过将int后的数字和int前的数字求差值,来判断数字是应该向上取整还是向下取整。

图解

alt

核心代码:

#include <stdio.h>
int main(){
    float n;//初始数值
    scanf("%f", &n);
    int m;
    m = n/1;//整数
    if((n - m) >= 0.5){
        printf("%d", m + 1);//向上取整
    }
    else{
        printf("%d", m);//向下取整
    }
    return 0;
}

时间复杂度:不需要循环执行,只需要一次判断,因此时间复杂度为O(1)O(1)

空间复杂度:不需要借助辅助数组,因此空间复杂度为O(1)O(1)

方法二: 思路分析: 本题相当于是将一个浮点型数字转换为整数数字,既然题目规定了大于0.5,向上取整,小于0.5,向下取整,那么就可以将该浮点型数字直接+0.5后,再使用int强制转换为整数即可得到最终结果。

图解:

alt

核心代码:

#include<stdio.h>

int main(void){
    double n;//双精度浮点型
    scanf("%lf",&n);
    printf("%d",(int)(n + 0.5));//强制输出
    return 0;
}

时间复杂度:不需要循环执行,因此时间复杂度为O(1)O(1)

空间复杂度:不需要借助辅助数组,因此空间复杂度为O(1)O(1)

全部评论

相关推荐

10-29 16:42
门头沟学院 Java
1.今天什么国标的公司打电话约面试,还得准备ppt,好麻烦,网上查薪资一般,打算拒了,不面了2.字节又复活了,什么安全开发,也不知道怎么样,面一面试试吧,还是挺想去字节的,但好难,随缘吧所以今天没面试
嵌入式的小白:面试前可以好好准备下 1.看看你投递的岗位的岗位描述,分析下是哪个业务线,同使要罗列他们描述中提到的技术点 2.根据1中的两点准备 3.岗位描述中应该还有语言要求,这个刷刷八股,要是对自己语言能力很有把握,那就不用看这点了 4.找下你简历中项目部分,看有没有和岗位描述中技术点重合的,这种在面试提到项目时,是高概率问题 好好准备,祝你面试顺利
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务