题意整理。
- 输入一个正浮点数。
- 按照四舍五入方式取近似值。
方法一(模拟)
1.解题思路
- 直接将浮点数强转为整数,然后计算小数部分的大小。
- 如果小数部分大于等于0.5,向上取整。如果小数部分小于0.5,向下取整。
图解展示:
2.代码实现
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//记录浮点数
float n=sc.nextFloat();
//如果小数部分大于等于0.5,向上取整
if(n-(int)n>=0.5){
System.out.println((int)n+1);
}
//如果小数部分小于0.5,向下取整
else{
System.out.println((int)n);
}
}
}
3.复杂度分析
- 时间复杂度:只需常数次操作,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。
方法二(字符串分割)
1.解题思路
- 首先利用buffer接收字符串形式的浮点数,然后按“.”对其进行分割。即可得到整数部分和小数部分。
- 如果小数部分大于等于0.5,向上取整。如果小数部分小于0.5,向下取整。
2.代码实现
import java.io.*;
public class Main{
public static void main(String[] args){
//输入正浮点数值
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s;
try{
while((s=br.readLine())!=null){
//用"."将浮点数分割
String[] str=s.split("\\.");
//如果小数部分大于等于5,向上取整
if(str[1].charAt(0)>='5'){
System.out.println(Integer.parseInt(str[0])+1);
}
//如果小数部分小于5,向下取整
else{
System.out.println(Integer.parseInt(str[0]));
}
}
}
catch(IOException e){
}
}
}
3.复杂度分析
- 时间复杂度:由于浮点数限制在32位以内,字符串分割的复杂度为浮点数的长度,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。