题目:科学计数法 (20 分)

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

题目分析及代码实现

分情况讨论:

  1. 首先是有效数字的符号正负,影响第一位的输出;
  2. 当阶数为负时,先输出零,在输出有效位
  3. 当阶数为正时,要来考虑两种情况,一是阶数小于小数位有效数字长度,这种需要考虑打印完整数部分还要打印小数部分,二是阶数大于小数位有效数字长度,这种再打印完整数部分后还需要打印0来补齐。
//有一个超时,19分
import java.util.Scanner;

public class Main {
	public static void main(String []args) {
		Scanner in =new Scanner(System.in);
		String input =in.nextLine();
		in.close();
		String temp[]=input.split("E");
		if(temp[0].charAt(0)=='-')
			System.out.print("-");
		String aString=temp[0].substring(1);//从第二个位置开始
		char a []=aString.toCharArray();//转成char型数组,不包含符号位
		int num=Integer.valueOf(temp[1]);
		
		if(num<0) {
			//阶数为负时较为简单
			System.out.print("0.");
			//打印0
			for (int i = 0; i < (-num)-1; i++) 
				System.out.print("0");	
			//打印有效数字
			for (int i = 0; i < a.length; i++) {
				if(a[i]!='.')
					System.out.print(a[i]);
			}	
		}
		
		else {
			System.out.print(a[0]);
			int count=0;//统计次数			
			for (int i = 2; i < a.length&&count<num; i++) {
				//打印有效小数点前的非零数字
				//当超过小数点后有效数字长度或超过阶数时跳出
				//从第二位开始打印,省略小数点
				  System.out.print(a[i]);
				count++;//统计打印次数
			}
			int count1=count;
			
			//若是阶数小于 科学计数法小数位 长度,需输出小数点和小数位
			if(num<a.length-2) {			
				for (int i = count+2; i < a.length; i++) {
					//当打印长度达到阶数却小于有效数字长度时,打印小数点
					if(count1==num)
					   System.out.print(".");
					System.out.print(a[i]);	
					count1++;
				}					
			}
			
			//若是阶数大于有效数字长度时,打印完有效数字还需打印打印0
			if(a.length-2<num) {
				for(int i=0;i<num-a.length+2;i++)
					System.out.print("0");
			}			
		}
	}
}

PAT乙级——1024(模拟数字转换)

相关文章:

  • 2021-10-06
  • 2022-01-16
  • 2022-01-28
  • 2021-10-29
  • 2021-09-20
  • 2021-04-22
  • 2021-12-04
  • 2021-04-03
猜你喜欢
  • 2021-10-21
  • 2021-12-03
  • 2021-06-09
  • 2021-08-21
  • 2022-01-09
  • 2021-07-16
  • 2021-10-21
相关资源
相似解决方案