题目描述

  • 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法
  • 其满足正则表达式[+-][1-9]”.”[0-9]+E[+-][0-9]+
  • 即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出
  • 现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留

输入描述:

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

输出描述:

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

样例

输入样例1:

  • +1.23400E-03

输出样例1:

  • 0.00123400

输入样例2:

  • 1.2E+10

输出样例2:

  • 12000000000

思路

  • 使用字符串来表示数值;
  • 负指数往前移动小数点,补0;
  • 正指数往后移动小数点,需要时补0或去掉小数点;
  • 表示数值时正号不显示,负号显示;

代码

  1. package com.liuyong666.pat;
  2. import java.util.Scanner;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. String a = sc.nextLine();
  7. /**
  8. * isFuZhiShu 指数是否为负
  9. * zhishu 指数的值
  10. * e_index E的索引值
  11. * dian_index .的索引值
  12. * quE E之前数值的绝对值
  13. */
  14. boolean isFuZhiShu = false;
  15. int zhishu = Integer.parseInt(a.substring(a.lastIndexOf('E') + 1));
  16. int e_index = a.indexOf('E');
  17. int dian_index = a.indexOf('.');
  18. StringBuffer quE = new StringBuffer(a.substring(1,e_index));
  19. //判断输入字符串是否是负指数
  20. if(a.charAt(a.lastIndexOf('E') + 1) == '-'){
  21. isFuZhiShu = true;
  22. }
  23. //负指数的情况下,在前边加若干个0,再加个.再加个0
  24. if(isFuZhiShu){
  25. if(-zhishu > 0){
  26. quE.deleteCharAt(1);
  27. for(int i = 0; i < -zhishu - 1; i++){
  28. quE.insert(0, '0');
  29. }
  30. quE.insert(0, '.');
  31. quE.insert(0, '0');
  32. }
  33. //输出需要把正负表示出来,正号不显示,负号显示
  34. System.out.println((a.charAt(0) == '+' ? "":"-") + quE.toString());
  35. //正指数的情况下,往后移动.的位置,按照需求补充0
  36. }else{
  37. if(zhishu > 0){
  38. quE.deleteCharAt(1);
  39. int dian_e_len = e_index - dian_index - 1;
  40. if(dian_e_len - zhishu > 0){
  41. quE.insert(zhishu + 1, '.');
  42. }else{
  43. for(int i = 0; i < zhishu - dian_e_len; i++){
  44. quE.insert(quE.length(), '0');
  45. }
  46. }
  47. }
  48. System.out.println((a.charAt(0) == '+' ? "":"-") + quE.toString());
  49. }
  50. }
  51. }