科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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.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); } } } }
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); } }
//模拟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(); }
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); } }
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); } }
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); } } }