题目描述
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分
只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。
输入描述:
每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。
输出描述:
对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
输入例子:
+1.23400E-03
输出例子:
0.00123400
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//读取科学计数法表示的数并存入字符串中
String string = in.next();
in.close();
//判断数值正负号
char sign1 = string.charAt(0);
int index = string.indexOf("E");
//判断指数正负号
char sign2 = string.charAt(index+1);
//截取小数部分与指数部分
String decimal = string.substring(1, index);
int exponent = Integer.parseInt(string.substring(index+2));
//为方便对小数进行插入删除操作,转换成StringBuffer
StringBuffer stringBuffer = new StringBuffer(decimal);
//指数为正,小数点向右移
if (sign2 == '+') {
//用于存储小数部分的位数
int len = stringBuffer.length() - 2;
//移动位数(即指数)不超过原小数部分的位数
if ( exponent > len ) {
//删除小数点
stringBuffer.deleteCharAt(1);
//往后补0
while((exponent-len) > 0){
stringBuffer.append('0');
exponent--;
}
}else {
//移动位数小于小数部分位数,在相应地方插入小数点
stringBuffer.deleteCharAt(1);
stringBuffer.insert(exponent+1, '.');
}
}else if (sign2 == '-') {
//如果指数为负,则小数前面补0
stringBuffer.deleteCharAt(1);
//删除小数点之后,在原小数前面补指数位个0
while(exponent > 0){
stringBuffer.insert(0, '0');
exponent--;
}
stringBuffer.insert(1, '.');
}
if (sign1 == '-') {
System.out.print(sign1);
}
System.out.println(stringBuffer);
}
}