思路:
首先要对输入的数据进行判断并记录数据类型,这里我用index记录,然后对应不同的数据类型执行不同的操作,至于反转操作可以使用StringBuilder中的reverse方法,输出再通过前面的记录值进行不同的输出。
从题目中可以得到信息
1.整数、百分数直接反转
2.小数、分数分成两部分反转,不交换整数(分子)和小数(分母)。
需要注意的地方:
1.整数若有后置零,反转后要把零去掉 例如120反转后是21。
2.小数中小数部分反转后,小数部分的前置零需要去掉 例如1.023反转后是1.32 忽略了这个条件只能90分。
3.split方法分隔,若符合的值在字符串末尾,相当于被替换成“”了。
package LOQ.字符串;
import java.util.Scanner;
/*
整数反转 升级版
*/
public class P1553 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
int index=0;
for(int i=0;i<s1.length();i++) {
if(s1.charAt(i)=='.') {
index=1; //判断输入情况并记录
break;
} else if(s1.charAt(i)=='/') {
index=2;
break;
} else if(s1.charAt(i)=='%') {
index=3;
break;
}
}
String[] s2 = s1.split("[.|//|%]"); //获取到分隔后的一部分或两部分
StringBuilder sb1 = new StringBuilder(s2[0]);
StringBuilder sb2 = null;
if(index==1 || index==2) { //若可以分成两部分就分成两部分
sb2 = new StringBuilder(s2[1]);
sb2.reverse();
}
sb1.reverse();
switch (index) {
case 0:
//转换成长整数输出
System.out.println(Long.parseLong(String.valueOf(sb1)));
break;
case 1:
sb2.reverse(); //消除分子部分后置零
long l=Long.parseLong(String.valueOf(sb2));
StringBuilder sb3 = new StringBuilder(String.valueOf(l));
System.out.println(Long.parseLong(String.valueOf(sb1))+"."+sb3.reverse());
break;
case 2:
System.out.println(Long.parseLong(String.valueOf(sb1))+"/"+Long.parseLong(String.valueOf(sb2)));
break;
case 3:
System.out.println(Long.parseLong(String.valueOf(sb1))+"%");
break;
}
}
}