一、题目


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

PAT-basic-1024 科学计数法 java的更多相关文章

  1. PAT Basic 1024 科学计数法 (20 分) Advanced 1073 Scientific Notation (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  2. PAT乙级 1024. 科学计数法 (20)

    1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...

  3. PAT乙级 1024. 科学计数法 (20)(未通过全部测试,得分18)

    1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...

  4. PAT乙级 1024 科学计数法

    思路 1.尝试失败:一开始想打算把结果直接存在一个字符串中,后来发现当指数大于0的时候还需要分别考虑两种情况,工程量巨大,尝试失败,于是借鉴了其他大佬思路,写出了ac代码 2.ac思路:首先取指数的绝 ...

  5. C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. PAT Bas ...

  6. PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)

    PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...

  7. PAT 1024 科学计数法 (20)(精简版代码+思路+推荐测试样例)

    1024 科学计数法 (20)(20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+, ...

  8. PAT-乙级-1024. 科学计数法 (20)

    1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...

  9. P 1024 科学计数法

    转跳点:

  10. PAT (Basic Level) Practice 1024 科学计数法 分数 20

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

随机推荐

  1. CentOS7.6下安装MySql和Redis

    安装的MySQL为5.7版本1.下载安装官方的Yum Repository [root@localhost ~]# wget http://dev.mysql.com/get/mysql57-comm ...

  2. 蓝牙mesh组网实践(手机配网例程配合wch mesh手机app的使用)

    目录 CH582的官方EVT在22年7月更新后,修改了手机配网代码以支持wch mesh手机app.使用该app可以保存手动配网信息,设置订阅地址分组,OTA升级,极大方便了用户管理节点. 老版本的E ...

  3. MapReduce原理——切片代码分析

    (1)程序先找到数据存储的目录 (2)遍历目录对每个文件进行切片 (3)遍历一个文件: 获取文件大小 计算切片大小 默认情况下,切片大小等于blocksize 每次切片时都要判断剩下部分师否大于块的1 ...

  4. Java并发编程 —— synchronized关键字

    一.是什么?(作用) synchronized关键字解决了多个线程之间访问资源的同步性问题,保证了被其修饰的方法或是代码块在任意时刻只能有一个线程执行. 而在早期的Java版本中,synchroniz ...

  5. A Novel Cross-domain Access Control Protocol in Mobile Edge Computing

    摘要 随着智能移动终端和移动通信技术的发展,移动边缘计算(MEC)已经应用到各个领域.然而,MEC也带来了新的数据安全威胁,包括数据访问威胁.针对MEC中的跨域访问控制问题,提出一种跨域访问控制协议C ...

  6. Hadoop环境的搭建

    Hadoop HDFS.Yarn.MapReduce Hadoop集群环境搭建 完全分布式环境,伪分布式将其中的多台服务器改为一台,并将配置文件中的相关内容更改即可 1.安装Linux系统模型机 关闭 ...

  7. 使用docker 创建6节点redis 集群 RedisCluster redis集群

    1.RedisCluster 特点(3主节点redis 集群  及6节点集群) 1.无中心节点,客户端与redis 节点直连,不需要中间代理,(有选举机制 master个数需要奇数个) 2.数据可以被 ...

  8. defineProperty和Proxy

    Proxy  JS标准内置对象 const p = new Proxy(target, handler) 创建一个对象的代理: let obj = { a: { b: { c: 1 } } } let ...

  9. 51电子-STC89C51开发板:回忆

    全部内容,请点击: 51电子-STC89C51开发板:<目录> ---------------------------  正文开始  --------------------------- ...

  10. Array方法学习总结

    Array 对象支持在 单个变量名下存储多个元素. Array方法: 在遍历多个元素的方法中,下面的方法在访问索引之前执行in检查,并且不将空槽与undefined合并:concat() 返回一个新数 ...