题目描述
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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); } }
本文介绍了一个Java程序,该程序能够将科学计数法表示的实数转换为普通数字表示法,同时保留所有有效数字,包括末尾的0。程序详细解析了如何读取输入、处理符号、移动小数点以及最终输出结果。
1441

被折叠的 条评论
为什么被折叠?



