题目描述
- 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法
- 其满足正则表达式[+-][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或去掉小数点;
- 表示数值时正号不显示,负号显示;
代码
package com.liuyong666.pat; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String a = sc.nextLine(); /** * isFuZhiShu 指数是否为负 * zhishu 指数的值 * e_index E的索引值 * dian_index .的索引值 * quE E之前数值的绝对值 */ boolean isFuZhiShu = false; int zhishu = Integer.parseInt(a.substring(a.lastIndexOf('E') + 1)); int e_index = a.indexOf('E'); int dian_index = a.indexOf('.'); StringBuffer quE = new StringBuffer(a.substring(1,e_index)); //判断输入字符串是否是负指数 if(a.charAt(a.lastIndexOf('E') + 1) == '-'){ isFuZhiShu = true; } //负指数的情况下,在前边加若干个0,再加个.再加个0 if(isFuZhiShu){ if(-zhishu > 0){ quE.deleteCharAt(1); for(int i = 0; i < -zhishu - 1; i++){ quE.insert(0, '0'); } quE.insert(0, '.'); quE.insert(0, '0'); } //输出需要把正负表示出来,正号不显示,负号显示 System.out.println((a.charAt(0) == '+' ? "":"-") + quE.toString()); //正指数的情况下,往后移动.的位置,按照需求补充0 }else{ if(zhishu > 0){ quE.deleteCharAt(1); int dian_e_len = e_index - dian_index - 1; if(dian_e_len - zhishu > 0){ quE.insert(zhishu + 1, '.'); }else{ for(int i = 0; i < zhishu - dian_e_len; i++){ quE.insert(quE.length(), '0'); } } } System.out.println((a.charAt(0) == '+' ? "":"-") + quE.toString()); } } }
我组建了一个技术交流群,提供免费的每日科技早报服务,里边也会有众多知名互联网企业的技术大佬一起交流学习,共同成长。需要的朋友可以加我微信(微信ID:919201148),我拉你进群,并有福利相送。
关注我的微信公众号,回复“礼包”领取我的学习资料
涵盖自学编程、Java技术、分布式笔记、算法刷题和程序员必读电子书等众多资料合集。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。