题解 | #取近似值#

取近似值

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)

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务