PAT (Basic Level) Practice (中文)1024 科学计数法 (20 分)

PAT (Basic Level) Practice (中文)

公告

原PAT网站用户可在 https://patest.cn/bind_old_pat_user 页面绑定至拼题A账号。绑定后,原PAT网站的提交将被合并至拼题A网站用户的对应题目集中。

返回

1024 科学计数法 (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

 思路:主要是考察细节,所以要仔细,不能马马虎虎,否则很难做对。

#include<iostream> 
#include<algorithm>
#include<cstring>
using namespace std;
int main(void){
	string s,s1;
	cin>>s;   
	s1+=s[1];
	int cur ;
	for( int i=3;i<s.length();i++){
	 	 if( s[i] !='E' ){ 
		     s1+=s[i];
	 	 }
	 	 else{
		   cur = i;
		   break;
	     }
	 } 
	 
	//计算指数大小 
	int  b=0;
	for( int i=cur+2;i<s.length();i++){
	     b =  b *10 + s[i] -'0';	 
	}
	 
	// 首先输出符号 
	if( s[0] != '+')
    	printf("%c",s[0]);   
    //  由于 s1包含了s[1],相当于左移了一位所以加1 
	b++; 
	// 如果指数是f符号,代表要左移。 
	if( s[cur+1]=='-'){
		// E是负号移位相对简单 
	    for( int i=1;i<b;i++){ 
             printf("0");
		     if( i == 1 )
			     printf(".");
	    }
	    cout<<s1<<endl; 
	}
	else {  
	      // 当b即需要右移位数大于或等于字符串长度时  
	      if( b >= s1.length() ){
	      	  cur = 0;
			  while( s1[cur] =='0' ){
			  	     cur++;
			  }      	 
			  b= b - s1.length();
			  for( int i=cur;i<s1.length();i++){
			  	   printf("%c",s1[i]);
			  } 
			  for( int j=b;j>=1;j--)
			       printf("0");
			  printf("\n");
		  }
		  else { 
		       //当b即需要右移位数小于字符串长度时 
		       cur = 0;
			   while( s1[cur] == '0' && cur <b ){
			   	      cur++;
			   } 
		       for(   int i = cur;i<b;i++){
		       	      printf("%c",s1[i]);
		       	      if( i==b-1 ){
		       	          printf("."); 	
				      }
			   } 
			   for( int i=b;i<s1.length();i++){
			   	    printf("%c",s1[i]);
			   }
		       printf("\n");
		   } 	
	} 
} 

猜你喜欢

转载自blog.csdn.net/S_999999/article/details/94717821