题目描述
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
输入描述:
输入一个正浮点数值
输出描述:
输出该数值的近似整数值
输入例子:
5.5
输出例子:
6
这个题,开始我做的很快,但是通过率只有60%。
问题1:
re=(int)Math.floor(num);
double i=num%re;
Math里面有取整的函数可以直接用!
num%re,而不是num%10,因为不能判断大小!
问题2:
一直都是 0.8 这个测试用例没有通过,
当num=0.8时,re用取整函数等于0 ,这个时候i就应该是Nan了,不过这个在线编程的工具好像令其等于无穷大,并没有报错。
然后就一直错一直错。
我暂时没有更好的想法,先用了非常恶心的 if if if来做了,这个代码是不优雅的,但是 AC 了,哎,先就这样吧。
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
double number=sc.nextDouble();
System.out.println(Func(number));
}
public static int Func(double num){
int re;
if(num<1){
if(num>=0.5)
re=1;
else
re=0;
}else{
re=(int)Math.floor(num);
double i=num%re;
if(i>=0.5){
re=re+1; }
}
return re;
}
}
不甘心的我,看了一下别人的实现....
1、用round函数:round是Java的四舍五入函数 【Java的floor是返回不大于的最大整数,ceil是返回不小于它的最小整数】
我看了一下round函数实现好复杂啊~返回long类型,应该是考虑了各种情况。
import java.util.Scanner;
public class MathRound {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNextDouble()){
double l=sc.nextDouble();
System.out.println(Math.round(l));
}
}
}
2、C++这一版我觉得很厉害了,用int强转...可以说非常霸道了
我在Java里面试了一下,确实厉害。
链接:https://www.nowcoder.com/questionTerminal/3ab09737afb645cc82c35d56a5ce802a
来源:牛客网
#include <iostream>
using namespace std;
int main()
{
float a;
cin>>a;
cout<<int(a+0.5);
return 0;
}