题解 | #取近似值#
取近似值
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前的数字求差值,来判断数字是应该向上取整还是向下取整。
图解:
核心代码:
#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;
}
时间复杂度:不需要循环执行,只需要一次判断,因此时间复杂度为。
空间复杂度:不需要借助辅助数组,因此空间复杂度为。
方法二: 思路分析: 本题相当于是将一个浮点型数字转换为整数数字,既然题目规定了大于0.5,向上取整,小于0.5,向下取整,那么就可以将该浮点型数字直接+0.5后,再使用int强制转换为整数即可得到最终结果。
图解:
核心代码:
#include<stdio.h>
int main(void){
double n;//双精度浮点型
scanf("%lf",&n);
printf("%d",(int)(n + 0.5));//强制输出
return 0;
}
时间复杂度:不需要循环执行,因此时间复杂度为。
空间复杂度:不需要借助辅助数组,因此空间复杂度为。