题解:
这个题连贯的逻辑比较强,所以最好把每一步的思路写下来,这样速度才能快,尽量使用最快IO流,时间最重要。
1. 取数字符号 数字字符串num 指数index 小数点位置 point 小数点左边个数left 小数点右边个数right
2 将 String 转成StringBuffer 更好操作 去掉小数点
3. index>0,
index>=right 右边填充 (index-right) 个0
index<right “.” 插入到 (point +index)的位置
4. index<0,
| index |>=left 左边填充 (| index |-right) 个0
| index |<left “.” 插入到 (point-| index |)的位置
5.输出
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// // 使用io流包装
// StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String str=bufferedReader.readLine();
// 取数字符号
String numSymbol=str.split("E")[0].substring(0,1);
// 取数字字符串
String num=str.split("E")[0].substring(1);
// 取指数
int index=Integer.parseInt(str.split("E")[1]);
//输出符号
if (numSymbol.equals("-"))
out.print(numSymbol);
// 将数字转成StringBuffer 操作
StringBuffer sb=new StringBuffer(num);
// 获取小数点位置
int point=num.indexOf(".");
// 记录左边个数 和右边个数
int left=num.substring(0,point).length();
int right=num.substring(point+1,num.length()).length();
// 将小数点去掉
sb.replace(point,point+1,"");
// 右边填充零
if (index>=0){
// 如果index 大于right 右边填充 index-right 个0
if (index>=right)
for (int i = 0; i <index-right ; i++)
sb.append("0");
// 如果index小于于right "."插入相应位置point+index
else
sb.insert(point+index,".");
out.print(sb.toString());
}
// 左边填充零
else {
// 如果 abs(index)>left 左边填充 abs(index)-left 个零
if (Math.abs(index)>=left) {
// 反转填充
sb.reverse();
for (int i = 0; i < Math.abs(index) - left; i++) {
sb.append("0");
}
sb.reverse();
out.print("0."+sb.toString());
}
// 如果index小于left "."插入相应位置point-index
else {
sb.insert(point-index,".");
out.print(sb.toString());
}
}
out.flush();
}
}
版权声明:本文为qq_41048982原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。