首页 > 试题广场 >

科学计数法 (20)

[编程题]科学计数法 (20)
  • 热度指数:19268 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分
只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。

输入描述:
每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。


输出描述:
对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
示例1

输入

+1.23400E-03

输出

0.00123400

import java.util.Collections;
import java.util.Scanner;

/**
 * @ClassName Main
 * @Description TODO
 * @Author Wlison
 * @Date 2020/3/11 9:38
 * @Version 1.0
 **/
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.nextLine();
            String[] es = str.split("E");
            int loc = Integer.parseInt(es[1].substring(1));
            String res = es[0].replace(".","");
            if (es[1].charAt(0)=='-') {
                res =  "0." + String.join("", Collections.nCopies(loc - 1, "0")) + res.substring(1);
            }else{
                if (loc+2<res.length()){
                    res = res.substring(1,loc+2)+"."+res.substring(loc+2);
                }else {
                    res = res.substring(1)+String.join("",Collections.nCopies(loc+2-res.length(),"0"));
                }
            }
            if (es[0].charAt(0)=='-'){
                System.out.println('-'+res);
            }else {
                System.out.println(res);
            }
        }
    }
}

发表于 2020-03-11 11:31:31 回复(1)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	private static BufferedReader bufferedReader;

	public static void main(String[] args) throws IOException {
		bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		
		String string = bufferedReader.readLine();
		
		char sign1 = string.charAt(0);
		
		StringBuilder result = new StringBuilder();
		
		StringBuilder first = new StringBuilder(string.substring(1, string.indexOf('E')));
		String second = string.substring(string.indexOf('E') + 1);
		
		char sign2 = second.charAt(0);
		
		int num = Math.abs(Integer.parseInt(second));
//		左移
		if (sign2 == '-') {
			for (int i = 0; i < num; i++) {
				result.append('0');
			}
			first.deleteCharAt(1);
			result.append(first);
			
			result.insert(1, '.');
			
		} else if (sign2 == '+') { // 右移
			result.append(first);
			
			if (num >= first.length() - 2) {
				result.deleteCharAt(1);
				for (int i = 0; i < num - first.length() + 2; i++) {
					result.append('0');
				}
			} else {
				result.deleteCharAt(1); // 测试通过
				result.insert(num + 1, '.');
			}
		}
		
		if (sign1 == '-') {
			result = new StringBuilder("-").append(result);
		}
		System.out.println(result);
	}
}
不难,但是烦人的一道题。
发表于 2020-03-01 14:44:00 回复(1)
//模拟new BigDecimal(iniString).toPlainString() 方法写,虽然有瑕疵,但也是自己的一份成果 public static String countionMethod(String iniString) {
    StringBuffer stringBuffer = new StringBuffer();
    String[] es = iniString.split("E");
    String numStr = es[0].substring(1);
    String estr = es[1].replaceFirst("[+-]", ""); int e = Integer.parseInt(estr); if (es[1].startsWith("+")) { if (e >= (numStr.length() - 2)) {
            stringBuffer.append("+").append(numStr.replaceAll("\\.", "")); while ((e - (numStr.length() - 2)) > 0) {
                stringBuffer.append("0");
                e--;
            }
        } else {
            stringBuffer.append(numStr.charAt(0))
                    .append(numStr.substring(2, e + 2))
                    .append(".")
                    .append(numStr.substring(e + 2, numStr.length()));
        }
    } else {
        stringBuffer.append("-0."); while ((e - 1) > 0) {
            stringBuffer.append("0");
            e--;
        }
        stringBuffer.append(numStr.replaceAll("\\.", ""));
    } return stringBuffer.toString();
}

发表于 2019-08-28 14:38:55 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        //创建键盘输入流
        Scanner scan = new Scanner(System.in);
        //接收
        String s = scan.next();
        scan.close();
        //定义最后输出的字符串
        String sum = "";
        //判断即将输出的是否是正数
        if(s.charAt(0) == '-') {
            sum += "-";
        }
        //将第一位符号去掉
        s = s.replaceFirst("\\W", "");
        //从E处进行切割
        String[] sNum = s.split("[A-Z]");
        //判断小数点是向前移还是向后移
        if(sNum[1].charAt(0) == '+') {
            //向后移,去掉原字符串点后在末尾加零
            sum += sNum[0].replaceAll("\\W", "");
            for (int i = 0; i < Integer.parseInt(sNum[1].replaceFirst("[+-]", "")) - (sNum[0].length() - 2); i++) {
                sum += "0";
            }
        }else {
            //向前移,在开头加上0.后加上零再加上原字符串
            sum += "0.";
            for (int i = 0; i < Integer.parseInt(sNum[1].replaceFirst("[+-]", "")) - 1; i++) {
                sum += "0";
            }
            sum += sNum[0].replaceAll("\\W", "");
        }
        System.out.println(sum);
    }
}

发表于 2019-06-06 14:40:03 回复(0)
package hjj0423;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String str=in.nextLine();
		String str1[]=str.split("\\.");
		String str2[]=str1[1].split("E");
		int n1=Integer.valueOf(str1[0]);
		int n2=Integer.valueOf(str2[0]);
		int n3=Integer.valueOf(str2[1]);
		StringBuffer sb = new StringBuffer(Math.abs(n1)+""+n2);
		if (n3>0) {
			if(str2[0].length()-n3>0){
				sb.insert(str2[0].length()-1, ".");
			}else {
				for (int i = 0; i < n3-str2[0].length(); i++) {
					sb.append("0");
				}
			}
		}else {
			for (int i = 0; i < -n3; i++) {
				sb.insert(0, "0");
			}
			sb.insert(1, ".");
		}
		if (n1<0) 
			sb.insert(0, "-");
		System.out.println(sb);
	}
}
发表于 2018-05-18 09:23:54 回复(0)
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = newBufferedReader(newInputStreamReader(System.in));
        String argument = bufferedReader.readLine();
        String speedUpString = "000000000000000000000000000000000000000000000000000000000000";
        String[] s1 = argument.split("E");
        String radixString = s1[0].replaceAll("[+.]", "");
        int exponent = Integer.parseInt(s1[1]);
        if(exponent < 0) {
            StringBuffer temp = newStringBuffer("");
            if(radixString.charAt(0) == '-') {
                temp.append("-");
                radixString = radixString.replaceAll("-", "");
            }
        temp.append("0.");
        while((exponent + 1) < 0) {
            if(exponent < -61) {
                temp.append(speedUpString);
                exponent += 60;
            }else{
                temp.append('0');
                exponent++;
            }
        }
       temp.append(radixString);
       System.out.println(temp);
        }else if(exponent > 0) {
            StringBuffer temp = newStringBuffer("");
            if(radixString.charAt(0) == '-') {
                radixString = radixString.replaceAll("-", "");
                temp.append("-");
            }
            temp.append(radixString.charAt(0));
            intflag = 1;
            while(exponent > 0) {
                if(flag < radixString.length()) {
                    temp.append(radixString.charAt(flag));
                    flag++;
                }else{
                    while(exponent > 0) {
                        if(exponent > 60) {
                            temp.append(speedUpString);
                            exponent -= 60;
                        }else{
                            temp.append('0');
                            exponent--;
                        }
                    }
                }
                exponent--;
            }
            if(flag < radixString.length()) {
                temp.append(".");
                while(flag < radixString.length()) {
                    temp.append(radixString.charAt(flag));
                    flag++;
                }
            }
            System.out.print(temp);
        }    
    }
}

编辑于 2017-11-20 15:33:05 回复(1)
我短不短!
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         System.out.println(new BigDecimal(in.next()).toPlainString());     }
}

发表于 2017-09-22 14:12:22 回复(1)