一、题目


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

二、解析


分情况讨论,分离这个正则表达式,可以把输入样例分成三个部分。记为left,middle,right,分值≤0或>0两种情况讨论:

  • <=0,即值为小数,这时候只要搞清楚小数点向左移的位数就行了。,拿样例1做例子,分别是:+1,23400,-03。明显这个例子leftMove=3,先输出0和小数点,再输出剩余的0,再输出left部分的整数1,再输出middle部分就行;leftMove如果为0需要特殊讨论,先输出left部分的整数1,再小数点,再middle部分。
  • >0,即值为正数,先搞清楚小数点会往右移动的位数,这里也分两种情况,需不需要补零。不管需不需要补零,都要先输出left的整数部分。如果需要补零,先输出middle部分,再补零即可;若不需要,则计算出小数点的位置,输出middle部分小数点前的,再输出小数点,再输出小数点后的。

最后讨论一下正负号应不应该输出即可。

三、代码


import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str[] = input.next().split("\\.|E");
// for (String s : str) {
// System.out.println(s);
// }
StringBuffer sb = new StringBuffer();
// <=0 的情况
if(str[2].charAt(0) == '-'){
int leftMove = Integer.parseInt(str[2].substring(1, str[2].length()));
if(leftMove == 0){
sb.append(str[0].charAt(1));
sb.append(".");
}else{
for(int i=0; i<leftMove; i++){
if(i==0) sb.append("0.");
else sb.append("0");
}
sb.append(str[0].charAt(1));
}
sb.append(str[1]);
}
// >0的情况
else{
int rightMove = Integer.parseInt(str[2].substring(1, str[2].length()));
int countZero = rightMove - str[1].length();
sb.append(str[0].charAt(1));
if(countZero < 0 ){
for (int i = 1; i <= str[1].length(); i++) {
if(i == rightMove) sb.append(str[1].charAt(i-1)+".");
else sb.append(str[1].charAt(i-1));
}
}else{
sb.append(str[1]);
for (int i = 0; i < countZero; i++)
sb.append("0");
}
}
if(str[0].charAt(0) == '-') System.out.print("-");
System.out.print(sb);
}
}

最新文章

  1. bootstrap validate 实现页面动态验证(formvalidate)
  2. RSA加密算法的加密与解密
  3. CSAPP读书随笔之一:为什么汇编器会将call指令中的引用的初始值设置为-4
  4. session和jsessionid有什么关系
  5. hdu 4832 dp ***
  6. WebClient模拟发送Post请求
  7. 使用CPA4破解经典密码算法
  8. python路径函操作
  9. maven 私服 配置 转
  10. Ajax数据的爬取(淘女郎为例)
  11. Just for mysql
  12. java设计模式---三种工厂模式
  13. Analysis Services features supported by SQL Server editions
  14. JavaScript 是如何工作:Shadow DOM 的内部结构 + 如何编写独立的组件!
  15. SQL Server 跨服务器查询
  16. 搜狗浏览器或者360浏览器安装chrome 浏览器插件
  17. EBS server log日志
  18. Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格
  19. Amazon SQS(Simple Queue Service) 简单介绍
  20. 【Unity】UGUI系列教程——拼接一个简单界面

热门文章

  1. Docker 安全加固
  2. 使用Telnet伪造邮件发送
  3. ENGG1310 Electricity and electronics P1.3 Electromagnetic
  4. react native 布局问题
  5. Bert使用
  6. slitaz中tazpkg更改软件源
  7. (已解决)MYSQL怎么实现表的id在插入删除的前提下连续递增?
  8. Linux下aria2详细配置,以及接管浏览器下载项
  9. uni-app学习笔记之----目录认识
  10. vagrant搭建centos7