1024 科学计数法 (20分)【java题解】【详解】

  • Post author:
  • Post category:java


题解:

这个题连贯的逻辑比较强,所以最好把每一步的思路写下来,这样速度才能快,尽量使用最快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 版权协议,转载请附上原文出处链接和本声明。