hkt1998

hkt1998

牛客网 | HJ7 | 取近似值 | C

2023-11-08

题目

链接

取近似值_牛客题霸_牛客网 (nowcoder.com)

描述

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

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

输入描述:

输入一个正浮点数值

输出描述:

输出该数值的近似整数值

示例 1

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

示例 2

输入:2.499 
输出:2 
说明:0.499<0.5,2.499 向下取整为 2

解题

输入的数据范围是正的32位浮点数,可以用int保存最后的结果。

#include <stdio.h>

int main() {
    float input;
    scanf("%f", &input);
    // 判断小数部分是大于等于0.5还是小于0.5
    // 通过类型转换取得整数部分,浮点数减去整数部分得到小数部分
    int result = (input - (int)input) >= 0.5 ? (int)input+1 : (int)input;
    printf("%d\n", result);    return 0;
}

知识点

1. 商运算符号

求商运算不会自动四舍五入,只会舍。

2. 浮点数

一个32位浮点数由三部分组成:

  • 1位符号位

  • 8位表示指数部分

  • 23位表示尾数部分

符号位用以标明浮点数的正负,指数部分用以标识浮点数的整数,尾数部分用于标识浮点数的尾数。

以浮点数0.15625的表示法为例,其二进制表示法为:

0011 \ 1110 \ 0010 \ 0000 \ 0000 \ 0000 \ 0000 \ 0000

存储方式如下图:

3. 取出浮点数的小数部分

通过类型转换,可以取出一个浮点数的整数部分,从而得到小数部分。