题目描述
输入
按格式读入一个3位的整数、一个实数、一个字符。
输出
按格式输出一个整数占8位左对齐、一个实数(位数不多于8位,保留一位小数后)占八位右对齐、一个字符,并用|隔开
样例输入
123456.789a
样例输出
123 | 456.8|a
import java.util.Scanner;
public class Main {
static Scanner in =new Scanner(System.in);
public static void main(String[] args) {
while(in.hasNext()){
String s=in.next();
System.out.print(s.substring(0,3)+" "+"|");
int pos=0;
char[] c=s.substring(3,s.length()-1).toCharArray();
for (int i = 0; i < c.length; i++) {
if(c[i]=='.'){
pos=i;
break;
}
}
for (int i = c.length-1; i>pos-1; i--) {
if(c[i]>='5'||c[i]=='&'){
c[i-1]=(char) (c[i-1]-'0'+49);
if(c[i-1]==':')//即当进位以后为10,根据ASCII码表为“:”对应的值,
c[i-1]='&'; //设置标志来判断,主要考虑全是9的情况!
}
}
if(c[pos+1]=='&'){//对于1.999类似情况进行处理!
c[pos-1]=(char) (c[pos-1]-'0'+49);
c[pos+1]='0';
}
String s1=new String(c);//字符数组转化为字符串
//取子串拼接转化为浮点数以便控制8位的格式
String s2=s1.substring(0,pos)+"."+s1.charAt(pos+1);
double k=Double.parseDouble(s2);
System.out.printf("%8.1f",k);
System.out.println("|"+s.charAt(s.length()-1));
}
}
}
反思:哇,感觉自己每道题总是犯低级错误,这道题我进位变成10 以后我竟然直接认为是‘0’,你以为数学呢,根据ASCII码表,加上1即原来是9以后的ASCII码值为“:”的值啊,真是的,好气哦,幸好自己查了一下表,改出来啦,开心,这道题的坑点在于浮点数部分进位是从最后一位一点一点往前进位的,特别注意1.999这种情况的处理!